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