客戶端向服務(wù)器發(fā)送請求,cookie則是表明我們身份的標(biāo)志。而“訪問登錄后才能看到的頁面”這一行為,恰恰需要客戶端向服務(wù)器證明:“我是剛才登錄過的那個(gè)客戶端”。于是就需要cookie來標(biāo)識(shí)客戶端的身份,以存儲(chǔ)它的信息(如登錄狀態(tài))
1、先在瀏覽器中登錄,然后打開開發(fā)者選項(xiàng),找到一個(gè)請求方法為POST的請求,復(fù)制Requests Headers中的cookie在爬取需要登錄的頁面時(shí)加上此cookies即可
1
2
3
4
|
import requests url = '......' headers = { 'cookies' : '......' } response = requests.get(url = url, headers = headers) |
2、 模擬登錄,并用session維持會(huì)話,用requests的session模擬登錄后session會(huì)記錄cookies,接下來的請求會(huì)被放在同一個(gè)會(huì)話中。舉個(gè)簡單例子,在 requests 中,如果直接利用 get()或 post()等方法的確可以做到模擬網(wǎng)頁的請求,但是這實(shí)際 上是相當(dāng)于不同的會(huì)話,也就是說相當(dāng)于你用了兩個(gè)瀏覽器打開了不同的頁面。設(shè)想這樣一個(gè)場景,第一個(gè)請求利用 post()方法登錄了某個(gè)網(wǎng)站,第二次想獲取成功登錄后的自 己的個(gè)人信息,你又用了一次 get()方法去請求個(gè)人信息頁面。 實(shí)際上,這相當(dāng)于打開了兩個(gè)瀏覽器, 這是兩個(gè)完全不相關(guān)的會(huì)話,能成功獲取個(gè)人信息嗎?那當(dāng)然不能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import requests ''' 下面的data是先在瀏覽器中登錄,然后打開開發(fā)者選項(xiàng),找到一個(gè)請求方法為POST的請求,復(fù)制里面的Form Data ''' url = '......' data = { username: '......' , password:flz_sanqianchi, rememberMe:true, lt:LT - 82465 - 9HtQnC7ZASZHohtnQlrqMvXo7cI2B7 , execution:e1s1, } headers = { 'user-agent' : 'Mozolla/5.0' } ''' 這里用requests的session來請求網(wǎng)頁,做到維持同一會(huì)話的目的 ''' session = requests.Session() reqsonse = session.post(url = url, headers = headers, data = data) ''' 接下來就可以請求別的登陸后的頁面,而不需要處理cookies ''' url2 = '這里是已經(jīng)登錄后的某一頁面' response = session.get(url = url2, headers = headers) |
以上這篇python模擬登陸,用session維持回話的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/wumxiaozhu/article/details/81542480