學會使用ip池和cookie池假裝

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

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

①response.content瀏覽器

類型:bytes服務器

解碼類型:沒有指定cookie

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

②response.content.decode()session

類型:strpost

解碼類型:解碼成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信息,作到對本身的完美假裝。
相關文章
相關標籤/搜索