爬蟲的四個步驟
0.擷取資料——爬蟲程式會根據我們提供的網址,向伺服器發起請求,然後傳回資料。
1.解析資料——爬蟲程式會把伺服器傳回的資料解析成我們能讀懂的格式。
2.提取資料——爬蟲程式再從中提取出我們需要的資料。
3.儲存資料——爬蟲程式把這些有用的資料儲存起來。
擷取資料——requests庫
requests庫可以幫我們下載下傳網頁源代碼、文本、圖檔甚至是音頻。
“下載下傳”本質上是向伺服器發送請求并得到響應。
函數:requests.get()
requests.get(‘URL’)
#requests.get是在調用requests庫中的get()方法,它向伺服器發送一個請求,括号裡的參數是你需要的資料所在的網址,然後伺服器對請求作出響應。我們把這個響應傳回的結果指派在變量res上。
#res = requests.get(‘URL’)。res是一個對象,屬于requests.models.response類。
Response對象的常用屬性
屬性 作用
response.status_code 檢查請求是否成功
response.content 把response對象轉換為二進制資料
response.text 把response對象轉換為字元串資料
response.encoding 定義response對象的編碼
1.response.status_code
print(res.status_code)
#列印變量res的響應狀态碼,以檢查請求是否成功。
#print(變量.status_code)是用來檢查請求是否正确響應,如果終端結果顯示了200,這個數字代表伺服器同意了請求,并傳回了資料給我們。
常見響應狀态碼解釋
響應狀态碼 說明
1xx 請求收到
2xx 請求成功
3xx 重定向
4xx 用戶端錯誤
5xx 伺服器端錯誤
100 繼續提出請求
200 成功
305 應使用代理通路
403 禁止通路
503 服務不可用
2.response.content
這個屬性能把response對象的内容以二進制資料的形式傳回,使用于圖檔、音頻、視訊的下載下傳。
eg:
import requests
res = requests.get('https://n1-q.mafengwo.net/s11/M00/FD/32/wKgBEFt70WSAGDenAAQ1h-DCqHc20.jpeg?imageView2%2F2%2Fw%2F680%2Fq%2F90')
#送出請求,并把傳回的結果放在變量res中
pic=res.content
#把Reponse對象的内容以二進制資料的形式傳回
#把圖檔、音頻、視訊轉換成二進制的位元組進行傳輸和存儲
photo = open('C:/Users/ASUS/Desktop/photo.jpg','wb')
#建立了一個檔案photo.jpg,這裡的檔案加了存儲路徑,它會被儲存在我所設定的桌面上。(如果檔案沒加路徑,它會被儲存在程式運作的目前目錄下。)
#圖檔内容需要以二進制wb讀寫(在學習open()函數時會有接觸)
photo.write(pic)
#擷取pic的二進制内容
photo.close()
#關閉檔案
open()函數中r、rb、w、wb、a、ab
“r”—— 以讀方式打開,隻能讀檔案 ,如果檔案不存在,會發生異常。
“w”——以寫方式打開,隻能寫檔案, 如果檔案不存在,建立該檔案并寫入;如果檔案已存在,先清空,再打開檔案從頭寫入。
“a”—— 打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。
“rb”——以二進制讀方式打開,隻能讀檔案 , 如果檔案不存在,會發生異常
“wb”——以二進制寫方式打開,隻能寫檔案, 如果檔案不存在,建立該檔案并寫入;如果檔案已存在,先清空,再打開檔案并寫入。
“ab”——以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。也就是說,新的内容将會被寫入到已有内容之後。如果該檔案不存在,建立新檔案進行寫入。
“r+”——打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。
“rb+”——以二進制格式打開一個檔案用于讀寫。檔案指針将會放在檔案的開頭。一般用于**非文本檔案如圖檔等。
“w+”——打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。
“wb+”——以二進制格式打開一個檔案用于讀寫。如果該檔案已存在則打開檔案,并從開頭開始編輯,即原有内容會被删除。如果該檔案不存在,建立新檔案。一般用于非文本檔案如圖檔等。
“a+”——打開一個檔案用于讀寫。如果該檔案已存在,檔案指針将會放在檔案的結尾。檔案打開時會是追加模式。如果該檔案不存在,建立新檔案用于追加。
“ab+”——以二進制格式打開一個檔案用于追加。如果該檔案已存在,檔案指針将會放在檔案的結尾。如果該檔案不存在,建立新檔案用于追加。
3.response.text
這個屬性可以把Response對象的内容以字元串的形式傳回,适用于文字、網頁源代碼的下載下傳。
eg:
import requests
#引用requests庫
res=requests.get('URL')
novel=res.text
#把Response對象的内容以字元串的形式傳回
k = open('《xxxx》.txt','w')
#建立一個名為《xxxx》的txt文檔,并寫入
k.write(novel)
#寫進檔案中
k.close()
#關閉文檔
4.response.encoding
res.encoding=‘gbk’ #定義Response對象的編碼為gbk
目标資料本身是什麼編碼是未知的。用requests.get()發送請求後,我們會取得一個Response對象,其中,requests庫會對資料的編碼類型做出自己的判斷。但是!這個判斷有可能準确,也可能不準确。
如果它判斷準确的話,我們列印出來的response.text的内容就是正常的、沒有亂碼的,那就用不到res.encoding;如果判斷不準确,就會出現一堆亂碼,那我們就可以去檢視目标資料的編碼,然後再用res.encoding把編碼定義成和目标資料一緻的類型即可。