②使用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信息,作到對本身的完美假裝。