代碼不是看出來的,而是敲出來的,歡迎關注公衆號,收藏教程,跟着步驟練習爬蟲,成爲真正的Spider Man。
在第一篇教程裏(不跳步驟新手python爬蟲教程(一))我們學習了安裝python、運行python、下載IDE: Pycharm(代碼編輯器)以及瀏覽器的網絡請求等相關知識內容,下面緊接着開始爬蟲第二篇教程的學習。
步驟一:認識http、https
HTTP:超文本傳輸協議。以明文形式傳輸,效率高,不安全。而HTTPS:HTTP+SSL(安全套接字層)。SSL證書需要購買申請,功能越強大的證書費用越高。傳輸數據前先加密,接收數據後解密獲取內容,效率低,更安全。http用的是80端口,而https用的是443端口。http報文格式如下圖:
步驟二:請求行與請求頭
在Headers裏面我們可以看到當前請求網址的General中請求的Request URL地址、Request Method請求方法、Status Code狀態碼等信息以及Response Headers響應頭、Request Headers請求頭以及Query String請求參數。
其中Request Method請求方法常見的有GET請求和POST請求。GET請求無請求體,POST請求有請求體。POST請求常用於登錄、註冊,傳輸大文本等(因爲POST請求可以攜帶比GET更大的數據量),例如翻譯網頁等。Status Code狀態碼常見的有 200(成功)服務器已成功處理了請求。400(錯誤請求)服務器不理解請求的語法。401(未授權)請求要求身份驗證。對於需要登錄的網頁,服務器可能返回此響應。403(禁止)服務器拒絕請求。404(未找到) 服務器找不到請求的網頁。
其中我們重點學習的是Request Headers,包括我們常見的請求行與請求頭。
User-Agent(用戶代理):對方服務器通過user-agent知道請求對方資源的是什麼瀏覽器,或者說是不是瀏覽器,通過chrome可以模仿(模擬)手機版的網頁瀏覽,模仿時候,user-agent是改成手機版的。
Accept:告訴服務端,我想接受什麼數據
Accept-Encoding:告訴服務端我可以接受什麼編碼方式的數據。
Accept-Language:告訴服務端我們希望接受什麼語言的數據。
Cookie:用來存儲用戶信息的,每次請求都會被帶上發送給對方的瀏覽器。要獲取登陸後才能訪問的頁面的內容。對方的服務器會通過cookie來判斷爬蟲。
步驟三:requests模塊
requests模塊是一個第三方模塊,所以我們首先需要安裝requests模塊。打開命令提示符窗口(鍵盤win鍵+R鍵,輸入cmd,點擊回車),敲入pip install requests進行下載。
requests模塊的使用。首先,像許多別的python第三方模塊一樣,用之前,我們需要在代碼的第一行導包,輸入import request。第一次導包會報錯,在紅色燈泡中選擇第一行的install requests,這樣requests就安裝在pycharm當中了。
發送GET、POST請求,獲取響應:
response1 = requests.get(url) #get請求,獲取響應
response2 = requests.post(url,data = {請求體的字典}) #post請求,需要請求體
這個時候,當我們直接print(response1)或者print(response2)的話,會得到一個<Response [200]> 其中200是狀態碼,如果學過HTTP知識的話,我們知道,這是一個代表正常訪問(200 OK)的狀態碼。
下面以百度的首頁爲例:
import requests
url = "http://www.baidu.com"
response = requests.get(url)
print(response)
import requests
url = "http://www.baidu.com"
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
response = requests.get(url,headers=headers)
print(response)
response的方法:
1.response.content.decode()此方法是把響應的二進制字節流轉化爲字符串類型
2.response.text該方法獲取網頁內容時往往會出現亂碼,所以要在此前加上一個response.encoding = “utf-8”
3.response.request.url獲取發送請求的url地址
4.response.url獲取響應的url地址
5.response.request.headers請求頭
6.response.headers響應頭
獲取網頁原碼的方式:
1.response.content.decode()
2.response.content.decode(“gbk”)某些網站的 編碼方式不是使用的"utf-8"而是"gbk"
3.response.text因爲.text方法是根據響應頭部的編碼進行推測,所以放到最後使用,有時候也會推測正確。當我們拿到一個網頁,用以上三種方式,一定可以獲取到網頁正確解碼方式的字符串
下面以百度翻譯的頁面爲例:
# coding=utf-8
import requests
url = "http://fanyi.baidu.com/basetrans"
query_string = {"query":"你好,世界",
"from":"zh",
"to":"en"}
headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1",}
response = requests.post(url,data=query_string,headers=headers)
print(response)
print(response.content.decode())
print(type(response.content.decode()))
運行結果如下:
關注公衆號【禿頭程序員】,不錯過不跳步驟的新手python爬蟲教程(三)