Python模擬登錄requests.Session應用詳解
最近由于某些原因,需要用到Python模擬登錄網(wǎng)站,但是以前對這塊并不了解,而且目標網(wǎng)站的登錄方法較為復雜, 所以一下卡在這里了,于是我決定從簡單的模擬開始,逐漸深入地研究下這塊。
注:本文僅為交流學習所用。
登錄特點:明文傳輸,有特殊標志數(shù)據(jù)
會話對象requests.Session能夠跨請求地保持某些參數(shù),比如cookies,即在同一個Session實例發(fā)出的所有請求都保持同一個cookies,而requests模塊每次會自動處理cookies,這樣就很方便地處理登錄時的cookies問題。在cookies的處理上會話對象一句話可以頂過好幾句urllib模塊下的操作。即相當于urllib中的:
cj = http.cookiejar.CookieJar() pro = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(pro) urllib.request.install_opener(opener)
模擬登錄V站
本篇文章的任務是利用request.Session模擬登錄V2EX(http://www.v2ex.com/)這個網(wǎng)站,即V站。
工具: Python 3.5,BeautifulSoup模塊,requests模塊,Chrome
這個網(wǎng)站登錄的時候抓到的數(shù)據(jù)如下:

其中用戶名(u)、密碼(p)都是明文傳輸?shù)?,很方便。once的話從分析登錄URL:http://www.v2ex.com/signin 的源文件(下圖)可以看出,應該是每次登錄的特有數(shù)據(jù),我們需要提前把它抓出來再放到Form Data里面POST給網(wǎng)站。

抓出來還是老方法,用BeautifulSoup神器即可。這里又學到一種抓標簽里面元素的方法,比如抓上面的"value",用soup.find('input',{'name':'once'})['value']即可
即抓取含有 name="once"的input標簽中的value對應的值。
于是構(gòu)建postData,然后POST。
怎么顯示登錄成功呢?這里通過訪問http://www.v2ex.com/settings 即可,因為這個網(wǎng)址沒有登錄是看不了的:

經(jīng)過上面的分析,寫出源代碼(參考了alexkh的代碼):
import requests
from bs4 import BeautifulSoup
url = "http://www.v2ex.com/signin"
UA = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36"
header = { "User-Agent" : UA,
"Referer": "http://www.v2ex.com/signin"
}
v2ex_session = requests.Session()
f = v2ex_session.get(url,headers=header)
soup = BeautifulSoup(f.content,"html.parser")
once = soup.find('input',{'name':'once'})['value']
print(once)
postData = { 'u': 'whatbeg',
'p': '*****',
'once': once,
'next': '/'
}
v2ex_session.post(url,
data = postData,
headers = header)
f = v2ex_session.get('http://www.v2ex.com/settings',headers=header)
print(f.content.decode())
然后運行發(fā)現(xiàn)成功登錄:

上面趴下來的網(wǎng)頁源代碼即為http://www.v2ex.com/settings的代碼。這里once為91279.

至此,登錄成功。
到此這篇關(guān)于Python模擬登錄requests.Session應用詳解的文章就介紹到這了,更多相關(guān)Python模擬登錄requests.Session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python快速建立超簡單的web服務器的實現(xiàn)方法
某些條件測試,需要一個簡單的web服務器測試一下,為此專門去配置個nginx 或者 apache服務器略顯麻煩,這里就為大家介紹一下使用python快速建立超簡單的web服務器的方法,需要的朋友可以參考下2018-02-02
python神經(jīng)網(wǎng)絡InceptionV3模型復現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡InceptionV3模型復現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2022-05-05
Python如何使用pymongo連接MongoDB數(shù)據(jù)庫并進行相關(guān)操作
PyMongo是驅(qū)動程序,使python程序能夠使用Mongodb數(shù)據(jù)庫,使用python編寫而成,下面這篇文章主要給大家介紹了關(guān)于Python如何使用pymongo連接MongoDB數(shù)據(jù)庫并進行相關(guān)操作的相關(guān)資料,需要的朋友可以參考下2023-05-05
python 阿里云oss實現(xiàn)直傳簽名與回調(diào)驗證的示例方法
這篇文章主要介紹了python 阿里云oss實現(xiàn)直傳簽名與回調(diào)驗證,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03

