《第2節(jié) 處理網(wǎng)絡信息》參考課件_第1頁
《第2節(jié) 處理網(wǎng)絡信息》參考課件_第2頁
《第2節(jié) 處理網(wǎng)絡信息》參考課件_第3頁
《第2節(jié) 處理網(wǎng)絡信息》參考課件_第4頁
《第2節(jié) 處理網(wǎng)絡信息》參考課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

川教版(2019)九年級上冊第三單元我的課外讀物—網(wǎng)絡爬蟲第2節(jié)處理網(wǎng)絡信息課堂導入同學們:上一節(jié)中,我們在Python中用requests模塊獲取到了“京東商城”的網(wǎng)頁信息,接下來,根據(jù)需要對數(shù)據(jù)進行處理和保存。讓我們按前面分析的步驟一步一步地來實現(xiàn)吧。學習目標1.學會使用BeautifulSoup模塊,對獲取到的信息進行清理。2.了解Html標簽在使用BeautifulSoup模塊時的作用。3.學會字符串合并、替換等簡單操作。4.掌握在Python中使用open函數(shù)保存文件,了解常用編碼方式UTF-8與GBK。目錄一、提取書籍的名稱二、同時提取書名和好評數(shù)三、保存信息四、我的課外讀物提取書籍的名稱一、提取書籍的名稱提取書籍的名稱使用BeautifulSoup模塊,可以很簡單地將我們需要的內(nèi)容從網(wǎng)頁中提取出來。解析“天貓圖書”頁面源代碼(resTxt即網(wǎng)頁源代碼變量)的代碼如下:resStr=BeautifulSoup(resTxt,’lxml’)這里,用BeautifulSoup模塊調(diào)用lxml解析器處理網(wǎng)頁源代碼resTxt,分析出源代碼中的標簽、數(shù)據(jù)等,并將處理后的結(jié)果賦值給變量resStr。下面,使用BeautifulSoup模塊,提取網(wǎng)頁中書籍的名稱。用class="title"作為關鍵字,通過select函數(shù)來取得所有書籍的名稱列表sm的代碼如下:sm=resStr.select(‘[class="title"]‘)sm是所有書籍名稱列表,按在網(wǎng)頁中出現(xiàn)的先后順序依次編號為0,1,2,3,4……也可以將提取到的書籍名稱直接打印,代碼如下:print(resStr.select(‘class=”title”]’)提取書籍的名稱我們只需要對上一節(jié)中的代碼稍做修改,即可達到目的,代碼如下:#1引入相應的模塊importrequestsfrombs4importBeautifulSoup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('/?spm=a21bo.jianhua.201867-main.29.5af911d9HKWXk5')res.encoding='UTF-8'resTxt=res.textresStr=BeautifulSoup(resTxt,"lxml")#用BeautifulSoup模塊調(diào)用lxml解析器處理resTxt文本,#賦值給變量resStrprint(resStr.select('[class="title"]'))#打印所有書名,使用class="title"來取得書籍的名稱提取書籍的名稱保存上面代碼,運行,結(jié)果如下圖所示:提取書籍的名稱上圖,使用BeautifulSoup模塊清除掉了除書籍名稱之外的所有內(nèi)容,得到一個列表,列表中第0項內(nèi)容是:<spanclass=“l(fā)itle”>三國演義</span>,……,以此類推。每一項目中都有不需要的span標簽,再將上面代碼完善一下,用for循環(huán)提取出列表中的每一項內(nèi)容,并只打印其中的書籍名稱,代碼如下:#①引入相應的庫importrequestsfrombs4importBeautifulSoup#②訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('/?spm=a21bo.jia nhua.201867-main.29.5af911d9HKWXk5')res.encoding='UTF-8'resTxt=res.textresStr=BeautifulSoup(resTxt,'lxml')sm=resStr.select('[class="title"]')#我們將所有獲取到的書籍名稱列表,賦值給變量smforfrinsm:#在列表變量sm中循環(huán),準備讀取出每本書籍的名稱

print(fr.string)#在屏幕上顯示出每本書籍的名稱提取書籍的名稱運行結(jié)果如下圖所示:提取書籍的名稱使用BeautifulSoup模塊從網(wǎng)頁中獲取到需要的信息,關鍵在于從Html中找到所需信息的“標簽”,通過標簽的值,就可以將需要的信息提取出來。提取書籍好評數(shù)的代碼如下:#1引入相應的庫importrequestsfrombs4importBeautifulSoup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('/?spm=a21bo.jianhua.201867-main.29.5af911d9HKWXk5')res.encoding='UTF-8'resTxt=res.textresStr=BeautifulSoup(resTxt,'lxml')hps=resStr.select('[class="title-sub"]')#請與上面代碼對比,這里的標簽進行了修改forfrinhps:print(fr.string)提取書籍的名稱運行結(jié)果如下圖所示:提取書籍的名稱小提示:每種書籍的好評數(shù)后面都有“條好評”這幾個文字,可以使用字符串替換的方法將文字刪除,只保留數(shù)字,替換命令是replace。請同學們運行下面代碼,并觀察運行結(jié)果,思考replace命令的作用。stra="這是個蘋果"print(stra.replace('蘋果','桃子'))print(stra.replace('西瓜','桃子'))不難發(fā)現(xiàn)第一個replace語句將蘋果替換成了桃子,而第二個語句中,因為字符串stra中沒有“西瓜”,所以替換不成功,返回原字符串。提取書籍的名稱只保留好評數(shù)數(shù)字部分的代碼就是:#1引入相應的庫importrequestsfrombs4importBeautifulSoup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('/chanpin/459613.html')res.encoding='UTF-8'resTxt=res.textresStr=BeautifulSoup(resTxt,'lxml')hps=resStr.select('[class="title-sub"]')forfrinhps:hpsStr=fr.string.replace('條好評',"").strip()#用空字符串替換“條好評”﹔print(hpsStr)#strip()函數(shù),清除文本頭部與尾部多余空格以及分段符提取書籍的名稱運行結(jié)果如下圖所示:同時提取書名和好評數(shù)二、同時提取書名和好評數(shù)同時提取書名和好評數(shù)前面分別提取到了書名和好評數(shù),我們要將二者結(jié)合起來一起顯示,這就要使用字符串合并的方法。請同學們運行下面代碼,仔細觀察打印結(jié)果,并思考其中的+號起了什么作用?stra="歡歡"strb="圓圓"strc="太棒了!"print(stra+strc)print(stra+strb+strc)由上面代碼可以發(fā)現(xiàn):使用+號,可以將兩個字符串合并在一起。使用+號合并字符串在七年級上冊Python編程時已經(jīng)使用過了。用+號合并字符串時,兩個字符串之間是沒有間隔的。同時提取書名和好評數(shù)我們已經(jīng)分別提取了所有的書名列表和好評數(shù)列表,下一步要將每一本書的名稱和對應的好評數(shù)合并,中間用逗號分隔。用for循環(huán)來實現(xiàn),用fr來依次枚舉列表title中的每一個書名,同時增加變量i表示列表title-sub的索引號來依次獲取對應的好評數(shù),即title-sub[i],變量i從0開始,依次加1,代碼如下:#1引入相應的庫importrequestsfrombs4importBeautifulSoup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('/chanpin/459613.html')res.encoding='UTF--8'resTxt=res.textresStr=BeautifulSoup(resTxt,'xml')sm=resStr.select('[class="title"]')#獲取書籍名hps=resStr.select('[class="title-sub"]')#獲取書籍好評數(shù)i=Oi=0forfrinsm:smStr=fr.string#提取書名

hpsStr=hps[i].string.replace("條好評","").strip()#與當前書名對應的第i個好評數(shù)

print(smStr+','+hpsStr)#連接書名與對應好評數(shù)字符串

i=i+l同時提取書名和好評數(shù)運行結(jié)果如下圖所示:保存信息三、保存信息根據(jù)前面的分析,下一步就是將這些信息保存到文件中,以便對數(shù)據(jù)進行后期處理。像上圖中的數(shù)據(jù),數(shù)據(jù)與數(shù)據(jù)之間用英文逗號來分隔,我們可以將其保存為擴展名為csv的文件,其實就是最簡單的Excel文檔,可以使用“Excel”或者“WPS表格”來打開它。在Python中,我們通常使用open函數(shù)來打開、保存、讀取及寫入文件。請同學們編寫下面代碼,將該代碼文件保存在Python目錄文件夾下,然后運行它,看看會發(fā)生什么情況。fl=open('測試文件.txt','w',encoding="GBK")#打開一個文件,但這個文件本不存在。fl.close()#關閉這個被打開的文件保存信息保存信息運行程序后,什么結(jié)果都沒有,再看看代碼所在的文件夾呢?文件夾中出現(xiàn)了一個空白的文件,名字就叫“測試文件.txt”。顯然,上面的代碼做了一件事,那就是新建了一個空白的文件。代碼中的w,是單詞write(寫入)的縮寫,意思是以“寫入”的方式打開這個文件。文件編碼方式是GBK,為默認編碼方式,可以不寫。如果編碼方式是UTF-8,則必須指定。現(xiàn)在用write()方法試試往這個文件中寫入內(nèi)容,看看會發(fā)生什么情況。請同學們修改代碼如下,觀察“測試文件.txt”中發(fā)生了什么變化。fl=open('測試文件.txt','w')fl.write('我是歡歡!')fl.close()保存信息運行結(jié)果如下圖所示:請同學們再修改代碼,往文件中寫入另一句話,觀察“測試文件.txt”中發(fā)生了什么變化,代碼如下:fl=open('測試文件.txt','w')fl.write('我喜歡玩Python!')fl.close()請同學們再修改代碼,將打開方式寫入(w)換成追加(a),運行并觀察“測試文件.txt”中發(fā)生了什么變化。fl=open('測試文件.txt','a')fl.write('我喜歡玩Python!')fl.close()保存信息運行之后再打開“測試文件.txt”,發(fā)現(xiàn)了什么呢?原始文件中的內(nèi)容“我是歡歡!”這句話不見了。只有“我喜歡玩Python!”也就是說,使用w方式打開文件,再寫入內(nèi)容,會覆蓋掉文件中原來的內(nèi)容。保存信息運行之后再打開“測試文件.txt”,發(fā)現(xiàn)了什么呢?有2句“我喜歡玩Python!”。使用a方式打開文件,再寫入內(nèi)容,不會覆蓋原來的內(nèi)容,會在后面添加新的內(nèi)容。使用open函數(shù)打開文件,要注意打開方式的參數(shù):讀“r”、寫“w”、追加“a”、讀文件時要求文件已經(jīng)存在,寫或者追加時,若文件不存在可以自動創(chuàng)建一個新文件。寫入文件時要注意,“w”方式會把原來的內(nèi)容覆蓋,"a”方式會把新內(nèi)容加在原文末尾。保存信息拓展閱讀GBK編碼與UTF-8編碼無論是保存文件、讀取文件,還是往文件中寫入內(nèi)容,都要注意,文件可能會有不同的編碼。中文Windows系統(tǒng)下,默認的文件編碼是GB2312(GBK),所以程序中使用open函數(shù)時,并沒有用encoding=‘編碼方式’這個參數(shù)強行指定某種編碼。但是從網(wǎng)頁上去爬取數(shù)據(jù)時,網(wǎng)頁的編碼方式絕大多數(shù)都是UTF-8的,要把網(wǎng)頁上的數(shù)據(jù)保存到電腦上時,最好就強行指定編碼為GBK。否則編碼不正確,會導致保存、讀取或者寫入的文本變成亂碼。所以,通常使用open函數(shù)將內(nèi)容寫入到文件時,可直接寫為:文件變量名=open("文件名.txt","a",encoding="GBK")保存信息那么,GBK編碼與UTF-8編碼到底有什么區(qū)別呢?最早的電腦都是使用英文的,英文一個字母只占一個字符,為了在電腦中使用中文,我國就制定了一個名叫GB2312的編碼標準。但GB2312只有常用漢字,并沒有包含所有漢字。為此,又在GB2312的基礎上擴展,形成了GBK編碼,包含了幾乎所有漢字與特殊字符。其他國家也存在文字編碼方式需要統(tǒng)一的問題,所以UTF-8編碼產(chǎn)生了。如果中文網(wǎng)頁使用了UTF-8編碼,外國人訪問也沒有問題;如果中文網(wǎng)頁使用了GBK編碼,則外國人訪問就必須下載中文字體,否則就看到亂碼。所以,UTF-8是全球統(tǒng)一的通用編碼,而GBK編碼是中文環(huán)境中的一種編碼,并不通用。在我們學習Python編程語言時,可使用網(wǎng)上大量的現(xiàn)成模塊,這些模塊的作者來自于全球各地。所以,使用Pytbon編寫代碼時,建議大家盡量使用UTF-8的編碼方式來保存自己的代碼。當調(diào)用了UTF-8編碼的外部模塊時,可能我們編寫的程序會出現(xiàn)一些出乎意料的問題。#1引入相應的庫importrequestsfrombs4importBeautifulSoup#2訪問網(wǎng)址獲取數(shù)據(jù)res=requests.get('/chanpin/459613.html')res.encoding='UTF-8'resTxt=res.textresStr=BeautifulSoup(resTxt,'lxml')sm=resStr.select('[class="title"]')#獲取書籍名hps=resStr.select('[class="title-sub"]')#獲取書籍好評數(shù)i=0stra=''#用兩個單引號,定義了一個待寫入的空字符串forfrinsm:smStr=fr.string#提取書名

hpsStr=hps[i].string.replace('條好評','').strip()#對應好評數(shù)

strb=smStr+','+hpsStr#連接書名與對應好評數(shù)字符串

stra=stra+strb+'\n'#文本累加,并在每行尾部加入一分段符\ni=i+1#3寫入數(shù)據(jù)到csv文件fl=open('書籍數(shù)據(jù).csv','w',encoding="GBK")fl.write(stra)#使用write()方法,寫入累加而成的字符串fl.close()保存信息前面爬蟲獲取到的書名和好評數(shù)的數(shù)據(jù),可以保存為后綴名為csv的文件,數(shù)據(jù)與數(shù)據(jù)之間,使用英文逗號來分隔。代碼如下:保存信息運行代碼即可得到“書籍數(shù)據(jù).csv”文件,首先用記事本打開這個文件,效果如下圖所示:保存信息在上圖中,每本書的價格與好評數(shù),都被爬取并保存了下來,數(shù)據(jù)之間是用英文逗號分隔開的。再用“WPS表格”或“Excel”打開這個文件,效果如下圖所示:保存信息思考:上面是把所有的書名和好評數(shù)依次合并在一個字符串中,最后用write()方法寫入這一個字符串,請同學們想一想,能用追加的方式來做嗎?上面只是獲取了書名

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論