學會使用ip池和cookie池僞裝

在進入正題之前,我們先複習一個關於requests模塊的相關知識點:

requests中解決編碼的三種方法:

①response.content

類型:bytes

解碼類型:沒有指定

如何修改編碼方式:response.content.decode()

②response.content.decode()

類型:str

解碼類型:解碼成python文本的字符串類型

如何修改編碼方式:respsonse.content.decode(encoding="utf-8")

③response.txt

類型:str

解碼類型:根據HTTP頭部對響應的編碼作出有根據的推測,推測的文本編碼。

如何修改編碼方式:response.encoding="gbk"

 

所以,綜上所述,最好的方式就是使用response.content.decode()來獲取響應的html頁面。

 

那麼現在,回到正題:

我們做爬蟲的時候,一定要學會僞裝自己。

因爲一旦有一天,你不採取措施,但是你需求的量多,頻率也快,是很容易被識別爲爬蟲的,從而對你攔截處理。

思路很簡單,就是我一個人模擬多個人,那麼從人的屬性分析:

瀏覽器名稱,ip地址,cookie和session信息。

所以我們寫爬蟲的時候,要準備一堆User-Agent,一堆ip地址和一堆cookie信息。

 

①使用代理ip
ip參數是proxies,依舊是字典的形式{"http":"http://www.baidu.com"}
 
ip的選擇
-準備一堆的ip地址,組成ip池,使用代理時隨機選擇一個ip使用。
-{"ip":"times":0}
-[{},{},{},{}],對這個ip地址的列表進行排序,按照使用次數進行那個排序。
-選擇使用次數較少的10個ip,從中隨機選擇一個。

檢查ip的可用性
-可以使用requests添加超時參數,判斷ip地址的質量
-在線代理ip質量檢測的網站
 
import requests
proxies={"http":"http://132.232.52.79:80"}       #選擇代理IP地址的時候,要選對跟自己網絡符合的端口哦,否則就是407
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"}
url="http://www.baidu.com"

response=requests.get(url,proxies=proxies,headers=headers)
print(response.status_code)
 
 
②使用cookie和session
 
cookie存放在客戶的瀏覽器上,session數據放在服務器上。
一組cookie和session的信息對應於一個用戶的信息。
使用過快過多會被識別會爬蟲。
但是要獲取登陸之後的頁面,必須發送帶有cookies的請求。
 
攜帶cookie請求
 
跟ip池一樣的是,這次需要攜帶一堆cookie進行請求,把cookie組成cookie池。
 
使用requests提供的session類來請求登陸之後的網站的思路
 
實例化sessin,
先使用session發送post請求,登錄到正確的網站,把cookie保存在session中,
再使用session請求get登陸之後才能訪問的網站,session能夠自動地攜帶登錄成功時保存在其中的cookie,進行請求。
 
import requests

session=requests.session()
url="http://www.renren.com/SysHome.do"
data={"email":"177********","password":"***123456789"}
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400"}
#使用session發送post請求,cookie保存在其中
session.post(url,data=data,headers=headers)
#使用session進行登陸之後才能訪問的地址
response=session.get("http://www.renren.com/969398979/profile",headers=headers)

#保存頁面
with open("renrenwang.html","w",encoding="utf-8") as f:
    f.write(response.content.decode())
 
cookie和session的使用思路,我再複述一遍:
首先實例化一個session,然後準備好post請求的表單內容,裏面包含賬號密碼等登陸信息。
然後用session發送post請求,登陸上網站,這個時候已經完成cookie和session的自動保存。
於是就再用session直接發送get請求,登陸上一個需要登陸賬號密碼的網頁,這個時候,依舊能訪問成功。
 
值得一提的是,這個過程可以簡化,當遇到一下三種情況的時候:
1.cookie過期時間很長的網站
2.在cookie過期之前能夠拿到所有的數據,比較麻煩
3.配合其他程序一起使用,其他程序專門獲取cookie,當前程序專門請求頁面
我們可以直接加入cookie信息,直接登陸上去。方法是和headrs字典一樣的,創造一個cookie字典放進去,然後get請求裏面放一個cookies參數。
具體過程我就不放代碼了,結合headers類似的方法應該都懂。
 
 
 
總結一下今後的爬蟲之路,就是準備一堆瀏覽器名稱,一堆IP地址和一堆cookie信息,做到對自己的完美僞裝。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章