同學(xué)們: 上一節(jié)中,我們?cè)赑ythn中用requests模塊獲取到了“京東商城”的網(wǎng)頁信息,接下來,根據(jù)需要對(duì)數(shù)據(jù)進(jìn)行處理和保存。讓我們按前面分析的步驟一步一步地來實(shí)現(xiàn)吧。
1. 學(xué)會(huì)使用BeautifulSup模塊,對(duì)獲取到的信息進(jìn)行清理。
2.了解Html標(biāo)簽在使用BeautifulSup模塊時(shí)的作用。
3.學(xué)會(huì)字符串合并、替換等簡(jiǎn)單操作。
4.掌握在Pythn中使用pen函數(shù)保存文件,了解常用編碼方式UTF-8與GBK。
二、同時(shí)提取書名和好評(píng)數(shù)
使用BeautifulSup模塊,可以很簡(jiǎn)單地將我們需要的內(nèi)容從網(wǎng)頁中提取出來。
解析“天貓圖書”頁面源代碼(resTxt即網(wǎng)頁源代碼變量)的代碼如下:resStr=BeautifulSup(resTxt,’lxml’)
這里,用BeautifulSup模塊調(diào)用lxml解析器處理網(wǎng)頁源代碼resTxt,分析出源代碼中的標(biāo)簽、數(shù)據(jù)等,并將處理后的結(jié)果賦值給變量resStr。
下面,使用BeautifulSup模塊,提取網(wǎng)頁中書籍的名稱。用作為關(guān)鍵字,通過select函數(shù)來取得所有書籍的名稱列表sm的代碼如下:sm=resStr.select(‘[]‘)sm是所有書籍名稱列表,按在網(wǎng)頁中出現(xiàn)的先后順序依次編號(hào)為0,1,2,3,4……
也可以將提取到的書籍名稱直接打印,代碼如下:print(resStr.select(‘class=”title”]’)
我們只需要對(duì)上一節(jié)中的代碼稍做修改,即可達(dá)到目的,代碼如下:#1引入相應(yīng)的模塊imprt requestsfrm bs4 imprt BeautifulSup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('')res.encding='UTF-8'resTxt=res.textresStr=BeautifulSup(resTxt,"lxml")#用BeautifulSup模塊調(diào)用lxml解析器處理resTxt文本,#賦值給變量resStrprint(resStr.select('[]'))#打印所有書名,使用來取得書籍的名稱
保存上面代碼,運(yùn)行,結(jié)果如下圖所示:
上圖,使用BeautifulSup模塊清除掉了除書籍名稱之外的所有內(nèi)容,得到一個(gè)列表,列表中第0項(xiàng)內(nèi)容是:三國(guó)演義,……,以此類推。每一項(xiàng)目中都有不需要的span標(biāo)簽,再將上面代碼完善一下,用fr循環(huán)提取出列表中的每一項(xiàng)內(nèi)容,并只打印其中的書籍名稱,代碼如下:#①引入相應(yīng)的庫(kù)imprt requestsfrm bs4 imprt BeautifulSup#②訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('')res.encding='UTF-8'resTxt=res.textresStr=BeautifulSup(resTxt,'lxml')sm=resStr.select('[]')#我們將所有獲取到的書籍名稱列表,賦值給變量smfr fr in sm:#在列表變量sm中循環(huán),準(zhǔn)備讀取出每本書籍的名稱 print(fr.string)#在屏幕上顯示出每本書籍的名稱
運(yùn)行結(jié)果如下圖所示:
使用BeautifulSup模塊從網(wǎng)頁中獲取到需要的信息,關(guān)鍵在于從Html中找到所需信息的“標(biāo)簽”,通過標(biāo)簽的值,就可以將需要的信息提取出來。
拓展: 獲取好評(píng)數(shù)、價(jià)格等信息與獲取書籍名稱的方法相同,只是關(guān)鍵詞不同。同學(xué)們可試試修改一下上面的代碼,來提取書籍的好評(píng)數(shù)、內(nèi)容簡(jiǎn)介和價(jià)格。
提取書籍好評(píng)數(shù)的代碼如下:#1引入相應(yīng)的庫(kù)imprt requestsfrm bs4 imprt BeautifulSup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('')res.encding='UTF-8'resTxt=res.textresStr=BeautifulSup(resTxt,'lxml')hps=resStr.select('[]')#請(qǐng)與上面代碼對(duì)比,這里的標(biāo)簽進(jìn)行了修改fr fr in hps: print(fr.string)
小提示: 每種書籍的好評(píng)數(shù)后面都有“條好評(píng)”這幾個(gè)文字,可以使用字符串替換的方法將文字刪除,只保留數(shù)字,替換命令是replace。
請(qǐng)同學(xué)們運(yùn)行下面代碼,并觀察運(yùn)行結(jié)果,思考 replace命令的作用。stra="這是個(gè)蘋果"print(stra.replace('蘋果','桃子'))print(stra.replace('西瓜','桃子'))
不難發(fā)現(xiàn)第一個(gè) replace語句將蘋果替換成了桃子,而第二個(gè)語句中,因?yàn)樽址畇tra中沒有“西瓜”,所以替換不成功,返回原字符串。
只保留好評(píng)數(shù)數(shù)字部分的代碼就是:#1引入相應(yīng)的庫(kù)imprt requestsfrm bs4 imprt BeautifulSup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('')res.encding='UTF-8'resTxt=res.textresStr=BeautifulSup(resTxt,'lxml')hps=resStr.select('[]')fr fr in hps: hpsStr=('條好評(píng)',"") .strip()#用空字符串替換“條好評(píng)”﹔ print(hpsStr)#strip()函數(shù),清除文本頭部與尾部多余空格以及分段符
前面分別提取到了書名和好評(píng)數(shù),我們要將二者結(jié)合起來一起顯示,這就要使用字符串合并的方法。
請(qǐng)同學(xué)們運(yùn)行下面代碼,仔細(xì)觀察打印結(jié)果,并思考其中的+號(hào)起了什么作用?stra="歡歡"strb="圓圓"strc="太棒了!"print(stra+strc)print(stra+strb+strc)
由上面代碼可以發(fā)現(xiàn):使用+號(hào),可以將兩個(gè)字符串合并在一起。使用+號(hào)合并字符串在七年級(jí)上冊(cè)Pythn編程時(shí)已經(jīng)使用過了。用+號(hào)合并字符串時(shí),兩個(gè)字符串之間是沒有間隔的。
我們已經(jīng)分別提取了所有的書名列表和好評(píng)數(shù)列表,下一步要將每一本書的名稱和對(duì)應(yīng)的好評(píng)數(shù)合并,中間用逗號(hào)分隔。用fr循環(huán)來實(shí)現(xiàn),用fr來依次枚舉列表title中的每一個(gè)書名,同時(shí)增加變量i表示列表title-sub的索引號(hào)來依次獲取對(duì)應(yīng)的好評(píng)數(shù),即title-sub[i],變量i從0開始,依次加1,代碼如下:#1引入相應(yīng)的庫(kù)imprt requestsfrm bs4 imprt BeautifulSup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('')res.encding='UTF--8'resTxt=res.textresStr=BeautifulSup(resTxt,'xml')sm=resStr.select('[]') #獲取書籍名hps=resStr.select('[]') #獲取書籍好評(píng)數(shù)i=Oi=0fr fr in sm: smStr=fr.string #提取書名 hpsStr=hps[i]("條好評(píng)","") .strip() #與當(dāng)前書名對(duì)應(yīng)的第i個(gè)好評(píng)數(shù) print(smStr +',' + hpsStr) #連接書名與對(duì)應(yīng)好評(píng)數(shù)字符串 i=i+l
根據(jù)前面的分析,下一步就是將這些信息保存到文件中,以便對(duì)數(shù)據(jù)進(jìn)行后期處理。像上圖中的數(shù)據(jù),數(shù)據(jù)與數(shù)據(jù)之間用英文逗號(hào)來分隔,我們可以將其保存為擴(kuò)展名為csv的文件,其實(shí)就是最簡(jiǎn)單的Excel文檔,可以使用“Excel”或者“WPS表格”來打開它。
在Pythn中,我們通常使用pen函數(shù)來打開、保存、讀取及寫入文件。
請(qǐng)同學(xué)們編寫下面代碼,將該代碼文件保存在Pythn目錄文件夾下,然后運(yùn)行它,看看會(huì)發(fā)生什么情況。fl=pen('測(cè)試文件.txt','w' ,encding="GBK")#打開一個(gè)文件,但這個(gè)文件本不存在。fl.clse() #關(guān)閉這個(gè)被打開的文件
運(yùn)行程序后,什么結(jié)果都沒有,再看看代碼所在的文件夾呢?文件夾中出現(xiàn)了一個(gè)空白的文件,名字就叫“測(cè)試文件.txt”。顯然,上面的代碼做了一件事,那就是新建了一個(gè)空白的文件。代碼中的w,是單詞 write(寫入)的縮寫,意思是以“寫入”的方式打開這個(gè)文件。文件編碼方式是GBK,為默認(rèn)編碼方式,可以不寫。如果編碼方式是UTF-8,則必須指定。
現(xiàn)在用 write()方法試試往這個(gè)文件中寫入內(nèi)容,看看會(huì)發(fā)生什么情況。請(qǐng)同學(xué)們修改代碼如下,觀察“測(cè)試文件.txt”中發(fā)生了什么變化。fl=pen('測(cè)試文件.txt','w')fl.write('我是歡歡!')fl.clse()
請(qǐng)同學(xué)們?cè)傩薷拇a,往文件中寫入另一句話,觀察“測(cè)試文件.txt”中發(fā)生了什么變化,代碼如下:fl=pen('測(cè)試文件.txt' ,'w')fl.write('我喜歡玩Pythn! ')fl.clse()
運(yùn)行之后再打開“測(cè)試文件.txt”,發(fā)現(xiàn)了什么呢?原始文件中的內(nèi)容“我是歡歡!”這句話不見了。只有“我喜歡玩Pythn!”也就是說,使用w方式打開文件,再寫入內(nèi)容,會(huì)覆蓋掉文件中原來的內(nèi)容。
請(qǐng)同學(xué)們?cè)傩薷拇a,將打開方式寫入(w)換成追加(a),運(yùn)行并觀察“測(cè)試文件.txt”中發(fā)生了什么變化。fl=pen('測(cè)試文件.txt' ,'a')fl.write('我喜歡玩Pythn! ')fl.clse()
運(yùn)行之后再打開“測(cè)試文件.txt”,發(fā)現(xiàn)了什么呢?有2句“我喜歡玩Pythn!”。使用a方式打開文件,再寫入內(nèi)容,不會(huì)覆蓋原來的內(nèi)容,會(huì)在后面添加新的內(nèi)容。
使用pen函數(shù)打開文件,要注意打開方式的參數(shù):讀“r”、寫“w”、追加“a‘”、讀文件時(shí)要求文件已經(jīng)存在,寫或者追加時(shí),若文件不存在可以自動(dòng)創(chuàng)建一個(gè)新文件。寫入文件時(shí)要注意,“w”方式會(huì)把原來的內(nèi)容覆蓋,"a”方式會(huì)把新內(nèi)容加在原文末尾。
GBK編碼與UTF-8編碼 無論是保存文件、讀取文件,還是往文件中寫入內(nèi)容,都要注意,文件可能會(huì)有不同的編碼。中文Windws系統(tǒng)下,默認(rèn)的文件編碼是GB2312(GBK),所以程序中使用pen函數(shù)時(shí),并沒有用encding=‘編碼方式’這個(gè)參數(shù)強(qiáng)行指定某種編碼。但是從網(wǎng)頁上去爬取數(shù)據(jù)時(shí),網(wǎng)頁的編碼方式絕大多數(shù)都是UTF-8的,要把網(wǎng)頁上的數(shù)據(jù)保存到電腦上時(shí),最好就強(qiáng)行指定編碼為GBK。否則編碼不正確,會(huì)導(dǎo)致保存、讀取或者寫入的文本變成亂碼。所以,通常使用pen函數(shù)將內(nèi)容寫入到文件時(shí),可直接寫為: 文件變量名=pen("文件名.txt","a",encding="GBK")
那么,GBK編碼與UTF-8編碼到底有什么區(qū)別呢?最早的電腦都是使用英文的,英文一個(gè)字母只占一個(gè)字符,為了在電腦中使用中文,我國(guó)就制定了一個(gè)名叫GB2312的編碼標(biāo)準(zhǔn)。但GB2312只有常用漢字,并沒有包含所有漢字。為此,又在GB2312的基礎(chǔ)上擴(kuò)展,形成了GBK編碼,包含了幾乎所有漢字與特殊字符。 其他國(guó)家也存在文字編碼方式需要統(tǒng)一的問題,所以UTF-8編碼產(chǎn)生了。如果中文網(wǎng)頁使用了UTF-8編碼,外國(guó)人訪問也沒有問題;如果中文網(wǎng)頁使用了GBK編碼,則外國(guó)人訪問就必須下載中文字體,否則就看到亂碼。所以,UTF-8是全球統(tǒng)一的通用編碼,而GBK編碼是中文環(huán)境中的一種編碼,并不通用。 在我們學(xué)習(xí)Pythn編程語言時(shí),可使用網(wǎng)上大量的現(xiàn)成模塊,這些模塊的作者來自于全球各地。所以,使用Pytbn編寫代碼時(shí),建議大家盡量使用UTF-8的編碼方式來保存自己的代碼。當(dāng)調(diào)用了UTF-8編碼的外部模塊時(shí),可能我們編寫的程序會(huì)出現(xiàn)一些出乎意料的問題。
前面爬蟲獲取到的書名和好評(píng)數(shù)的數(shù)據(jù),可以保存為后綴名為csv的文件,數(shù)據(jù)與數(shù)據(jù)之間,使用英文逗號(hào)來分隔。代碼如下:#1引入相應(yīng)的庫(kù)imprt requestsfrm bs4 imprt BeautifulSup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('')res.encding='UTF-8'resTxt=res.textresStr=BeautifulSup(resTxt,'lxml')sm=resStr.select('[]') #獲取書籍名hps=resStr.select('[]') #獲取書籍好評(píng)數(shù)i=0stra='' #用兩個(gè)單引號(hào),定義了一個(gè)待寫入的空字符串fr fr in sm: smStr=fr.string #提取書名 hpsStr=hps[i]('條好評(píng)','').strip() #對(duì)應(yīng)好評(píng)數(shù) strb=smStr+','+hpsStr #連接書名與對(duì)應(yīng)好評(píng)數(shù)字符串 stra=stra+strb+'\n' #文本累加,并在每行尾部加入一分段符\n i=i+1#3寫入數(shù)據(jù)到csv文件fl=pen('書籍?dāng)?shù)據(jù).csv','w',encding="GBK")fl.write(stra) #使用write()方法,寫入累加而成的字符串fl.clse()
運(yùn)行代碼即可得到“書籍?dāng)?shù)據(jù).csv”文件,首先用記事本打開這個(gè)文件,效果如下圖所示:
在上圖中,每本書的價(jià)格與好評(píng)數(shù),都被爬取并保存了下來,數(shù)據(jù)之間是用英文逗號(hào)分隔開的。再用“WPS表格”或“Excel”打開這個(gè)文件,效果如下圖所示:
思考: 上面是把所有的書名和好評(píng)數(shù)依次合并在一個(gè)字符串中,最后用write()方法寫入這一個(gè)字符串,請(qǐng)同學(xué)們想一想,能用追加的方式來做嗎?上面只是獲取了書名和好評(píng)數(shù)、能把書籍價(jià)格也加入表格嗎?親自動(dòng)手實(shí)踐一下吧。
通過前面的學(xué)習(xí),我們可以用Pythn編寫程序,在網(wǎng)絡(luò)上獲取需要的信息,并將其保存到文件中。而后根據(jù)需要對(duì)保存的數(shù)據(jù)信息進(jìn)行加工和處理,提取出對(duì)我們有價(jià)值的信息。

相關(guān)課件

川教版(2019)九年級(jí)下冊(cè)第2節(jié) 實(shí)踐操作 實(shí)施機(jī)器人項(xiàng)目完美版ppt課件:

這是一份川教版(2019)九年級(jí)下冊(cè)第2節(jié) 實(shí)踐操作 實(shí)施機(jī)器人項(xiàng)目完美版ppt課件,共19頁。PPT課件主要包含了課堂導(dǎo)入,課堂小結(jié)等內(nèi)容,歡迎下載使用。

初中信息技術(shù)川教版(2019)九年級(jí)上冊(cè)第1節(jié) 爬取網(wǎng)絡(luò)信息課文配套ppt課件:

這是一份初中信息技術(shù)川教版(2019)九年級(jí)上冊(cè)第1節(jié) 爬取網(wǎng)絡(luò)信息課文配套ppt課件,共21頁。PPT課件主要包含了課堂導(dǎo)入,明確任務(wù),實(shí)現(xiàn)方法,課堂小結(jié)等內(nèi)容,歡迎下載使用。

初中信息技術(shù)川教版(2019)九年級(jí)上冊(cè)第3節(jié) 揭開物聯(lián)網(wǎng)的面紗課文配套課件ppt:

這是一份初中信息技術(shù)川教版(2019)九年級(jí)上冊(cè)第3節(jié) 揭開物聯(lián)網(wǎng)的面紗課文配套課件ppt,共28頁。PPT課件主要包含了課堂導(dǎo)入,分析智能溫室項(xiàng)目,認(rèn)識(shí)物聯(lián)網(wǎng),課堂小結(jié)等內(nèi)容,歡迎下載使用。

英語朗讀寶

相關(guān)課件 更多

信息技術(shù)九年級(jí)上冊(cè)第二單元 走近物聯(lián)網(wǎng)第1節(jié) 設(shè)計(jì)智能溫室課文配套課件ppt

信息技術(shù)九年級(jí)上冊(cè)第二單元 走近物聯(lián)網(wǎng)第1節(jié) 設(shè)計(jì)智能溫室課文配套課件ppt

初中信息技術(shù)第一單元 家庭云第4節(jié) 管理家庭云評(píng)課ppt課件

初中信息技術(shù)第一單元 家庭云第4節(jié) 管理家庭云評(píng)課ppt課件

川教版(2019)九年級(jí)上冊(cè)第3節(jié) 體驗(yàn)家庭云說課課件ppt

川教版(2019)九年級(jí)上冊(cè)第3節(jié) 體驗(yàn)家庭云說課課件ppt

初中信息技術(shù)川教版(2019)八年級(jí)上冊(cè)第3節(jié) 視頻的編輯與處理課文課件ppt

初中信息技術(shù)川教版(2019)八年級(jí)上冊(cè)第3節(jié) 視頻的編輯與處理課文課件ppt

資料下載及使用幫助
版權(quán)申訴
版權(quán)申訴
若您為此資料的原創(chuàng)作者,認(rèn)為該資料內(nèi)容侵犯了您的知識(shí)產(chǎn)權(quán),請(qǐng)掃碼添加我們的相關(guān)工作人員,我們盡可能的保護(hù)您的合法權(quán)益。
入駐教習(xí)網(wǎng),可獲得資源免費(fèi)推廣曝光,還可獲得多重現(xiàn)金獎(jiǎng)勵(lì),申請(qǐng) 精品資源制作, 工作室入駐。
版權(quán)申訴二維碼
初中信息技術(shù)川教版(2019)九年級(jí)上冊(cè)電子課本

第2節(jié) 處理網(wǎng)絡(luò)信息

版本: 川教版(2019)

年級(jí): 九年級(jí)上冊(cè)

切換課文
所有DOC左下方推薦
歡迎來到教習(xí)網(wǎng)
  • 900萬優(yōu)選資源,讓備課更輕松
  • 600萬優(yōu)選試題,支持自由組卷
  • 高質(zhì)量可編輯,日均更新2000+
  • 百萬教師選擇,專業(yè)更值得信賴
微信掃碼注冊(cè)
qrcode
二維碼已過期
刷新

微信掃碼,快速注冊(cè)

手機(jī)號(hào)注冊(cè)
手機(jī)號(hào)碼

手機(jī)號(hào)格式錯(cuò)誤

手機(jī)驗(yàn)證碼 獲取驗(yàn)證碼

手機(jī)驗(yàn)證碼已經(jīng)成功發(fā)送,5分鐘內(nèi)有效

設(shè)置密碼

6-20個(gè)字符,數(shù)字、字母或符號(hào)

注冊(cè)即視為同意教習(xí)網(wǎng)「注冊(cè)協(xié)議」「隱私條款」
QQ注冊(cè)
手機(jī)號(hào)注冊(cè)
微信注冊(cè)

注冊(cè)成功

返回
頂部