Python爬蟲攜帶Cookie,session會話保持,對於需要登錄才能抓數據的處理方式

在做爬蟲時,有的網站必須先登錄才能訪問到頁面,爬這樣的網頁,就需要像請求中插入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

提示:現在很多網站都做了驗證碼機制,使用以上的方式可能行不通。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章