1 爬蟲中使用cookie
為了能夠通過爬蟲獲取到登錄后的頁面,或者是解決通過cookie的反扒,需要使用request來處理cookie相關的請求
1.1 爬蟲中使用cookie的利弊
-
帶上cookie的好處
- 能夠訪問登錄后的頁面
- 能夠實現部分反反爬
-
帶上cookie的壞處
- 一套cookie往往對應的是一個用戶的信息,請求太頻繁有更大的可能性被對方識別為爬蟲
- 那么上面的問題如何解決 ?使用多個賬號
1.2 requests處理cookie的方法
使用requests處理cookie有三種方法:
- cookie字符串放在headers中
- 把cookie字典放傳給請求方法的cookies參數接收
- 使用requests提供的session模塊
2 cookie添加在heades中
2.1 headers中cookie的位置
- headers中的cookie:
- 使用分號(;)隔開
- 分號兩邊的類似a=b形式的表示一條cookie
- a=b中,a表示鍵(name),b表示值(value)
- 在headers中僅僅使用了cookie的name和value
2.2 在headers中使用cookie
復制瀏覽器中的cookie到代碼中使用
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Cookie":" Pycharm-26c2d973=dbb9b300-2483-478f-9f5a-16ca4580177e; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1512607763; Pycharm-26c2d974=f645329f-338e-486c-82c2-29e2a0205c74; _xsrf=2|d1a3d8ea|c5b07851cbce048bd5453846445de19d|1522379036"}requests.get(url,headers=headers)
注意:
cookie有過期時間 ,所以直接復制瀏覽器中的cookie可能意味著下一程序繼續運行的時候需要替換代碼中的cookie,對應的我們也可以通過一個程序專門來獲取cookie供其他程序使用;當然也有很多網站的cookie過期時間很長,這種情況下,直接復制cookie來使用更加簡單
3 使用cookies參數接收字典形式的cookie
- cookies的形式:字典
cookies = {"cookie的name":"cookie的value"}
- 使用方法:
requests.get(url,headers=headers,cookies=cookie_dict}
4 使用requests.session處理cookie
前面使用手動的方式使用cookie,那么有沒有更好的方法在requets中處理cookie呢?
requests 提供了一個叫做session類,來實現客戶端和服務端的會話保持
會話保持有兩個內涵:
- 保存cookie,下一次請求會帶上前一次的cookie
- 實現和服務端的長連接,加快請求速度
4.1 使用方法
session = requests.session()
response = session.get(url,headers)
session實例在請求了一個網站后,對方服務器設置在本地的cookie會保存在session中,下一次再使用session請求對方服務器的時候,會帶上前一次的cookie
4.2思路分析
- 準備url地址和請求參數
- 構造session發送post請求
- 使用session請求個人主頁,觀察是否請求成功
cookie字符串可以放在headers字典中,鍵為Cookie,值為cookie字符串;可以把cookie字符串轉化為字典,使用請求方法的cookies參數接收;使用requests提供的session模塊,能夠自動實現cookie的處理,包括請求的時候攜帶cookie,獲取響應的時候保存cookie