在做爬蟲時,有的網站必須先登錄才能訪問到頁面,爬這樣的網頁,就需要像請求中插入Cookie值,下面介紹3種方式
方式一:將Cookie插入Headers請求頭
1,先登錄成功一次,獲取到攜帶登錄信息的Cookie(需要手動)
拿CSDN舉例,登錄成功 -> 個人主頁 -> 打開控制檯 -> 刷新頁面 -> 看到以自己用戶名命名的文件 -> 複製cookie
2,攜帶cookie發請求
需要用到requests模塊的get請求
import requests
headers={
'Cookie':'複製頁面文件裏的cookie值'
}
html=requests.get(url='',headers=headers).text
方式二:Cookies直接作爲requests方法的參數
方式二與方式一都是通過攜帶Cookie來發請求,方式二直接調用requests的cookies參數,但是要求cookies是一個字典類型,所以要對從網上覆制下來的cookie值進行一些處理,cookie中都是鍵值對的形式,如:
uuid_tt_dd=10_19035893370-1578805336439-452978; dc_session_id=10_1578805336439.387381;
我們要將這樣的一串字符串做成字典的形式首先要將它以“; ”分隔,注意兩個值直接不僅有;符號,還有一個空格,所以是;+空格。分隔之後得到的格式爲:鍵=值 ,再以=號分隔,取[0]爲鍵,[1]爲值,如下:
import requests
cookies="從網上覆制的cookie值"
cookies_dict={}
for i in cookies.split("; "):
cookies_dict[i.splict('=')[0]] = i.splict('=')[1]
html=requests.get(url='',cookies=cookies_dict}
方式三:session會話保持
request模塊提供了session類,來實現客戶端和服務端的會話保持,操作方法如下:
1.實例化session對象
2.使用session.post()模擬登陸,此時將得到cookie,並保存到session中
3.再使用session.post()或session.get()方法請求頁面時,不會提示需要登錄,因爲上一步已經將cookie保存到會話中了
人人網案例:
首頁URL:http://www.renren.com/
使用requests模擬登錄人人網,獲取請求的地址action:http://www.renren.com/PLogin.do
name="email",password="password"
使用session的posts方法做一次登錄請求,將cookie保存在session會話裏。
如下:
import requests
url='http://www.renren.com/PLogin.do' session=requests.session() data={ 'email':'', 'password':'' } session.post(url=url,headers=headers,data=data) html=se.get(url=url,headers=headers).text
提示:現在很多網站都做了驗證碼機制,使用以上的方式可能行不通。