Python爬蟲之Requests模塊session進行登錄狀態保持


一、利用requests.session進行登錄狀態保持
  Requests模塊中的session類能夠自動處理發送請求獲取響應過程中產生的cookie,進而達到狀態保持的目的。

接下來我們通過requests.session登錄GitHub網學習

1、requests.session的作用以及應用場景
  requests.session的作用:自動處理cookie,即 下一次請求會帶上前一次的cookie
  requests.session的應用場景:自動處理連續的多次請求過程中產生的cookie
2、requests.session使用方法
  session實例在請求了一個網站后,對方服務器設置在本地的cookie會保存在session中,下一次再使用session請求對方服務器的時候,會帶上前一次的cookie

session = requests.session() # 實例化session對象
response = session.get(url, headers, ...)
response = session.post(url, data, ...)

  session對象發送get或post請求的參數,與requests模塊發送請求的參數完全一致
3、測試
使用requests.session來完成github登陸,並獲取需要登陸后才能訪問的頁面

(1)提示
  對github登陸以及訪問登陸后才能訪問的頁面的整個完成過程進行抓包
  ①、首先訪問https://github.com/login頁面,

 

  ②、打開Preserve log,輸入賬號和密碼,點擊登錄按鈕進行登錄;登錄完成后找到一個名為session的文件,

 

(2)確定登陸請求的url地址、請求方法和所需的請求參數,部分請求參數在別的url對應的響應內容中,可以使用re模塊獲取

 

 

# url1-獲取taken
url1 = 'https://github.com/login'
# 發送請求獲取響應
res_1 = session.get(url1, timeout=3).content.decode()
# 正則提起
token = re.findall('name="authenticity_token" value="(.*?)" />', res_1)
print(token)

(3)確定登陸后才能訪問的頁面的的url地址和請求方法

(4)利用requests.session完成代碼

import requests
import re


def login():
    # session
    session = requests.session()

    # headers
    session.headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.2261 SLBChan/10 "
    }

    # url1-獲取taken
    url1 = 'https://github.com/login'
    # 發送請求獲取響應
    res_1 = session.get(url1, timeout=3).content.decode()
    # 正則提起
    token = re.findall('name="authenticity_token" value="(.*?)" />', res_1) # 使用正則獲取登陸請求所需參數
    print(token) 

    # url2-登錄
    url2 = 'https://github.com/session'
    # 構建表單數據
    data = {
        "commit": "Sign in", # 固定值
        "authenticity_token": token, # 該參數在登陸頁的響應內容中
        "login": input('輸入github賬號:'),
        "password": input('輸入github賬號:')
        "webauthn - support": "supported",
        "webauthn - iuvpaa - support": "unsupported"
    }
    print(data)
    # 發送請求登錄
    session.post(url2, data=data)
    # url3-驗證
    # 將得到的頁面保存為html,然后打開保存后的github.html是否與自己登錄后的頁面一致
    url3 = 'https://github.com/賬號的名稱'
    response = session.get(url3)
    with open('github.html', 'wb') as f:
        f.write(response.content)


if __name__ == '__main__':
    login()

參考: Python爬蟲之Requests模塊session進行登錄狀態保持_兮尹的博客-CSDN博客_python requests 獲取session


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM