1. 程式人生 > 程式設計 >Python模擬登入requests.Session應用詳解

Python模擬登入requests.Session應用詳解

最近由於某些原因,需要用到Python模擬登入網站,但是以前對這塊並不瞭解,而且目標網站的登入方法較為複雜, 所以一下卡在這裡了,於是我決定從簡單的模擬開始,逐漸深入地研究下這塊。

注:本文僅為交流學習所用。

登入特點:明文傳輸,有特殊標誌資料

會話物件requests.Session能夠跨請求地保持某些引數,比如cookies,即在同一個Session例項發出的所有請求都保持同一個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/)這個網站,即V站。

工具: Python 3.5,BeautifulSoup模組,requests模組,Chrome

這個網站登入的時候抓到的資料如下:

Python模擬登入requests.Session應用詳解

其中使用者名稱(u)、密碼(p)都是明文傳輸的,很方便。once的話從分析登入URL:http://www.v2ex.com/signin 的原始檔(下圖)可以看出,應該是每次登入的特有資料,我們需要提前把它抓出來再放到Form Data裡面POST給網站。

Python模擬登入requests.Session應用詳解

抓出來還是老方法,用BeautifulSoup神器即可。這裡又學到一種抓標籤裡面元素的方法,比如抓上面的"value",用soup.find('input',{'name':'once'})['value']即可

即抓取含有 name="once"的input標籤中的value對應的值。

於是構建postData,然後POST。

怎麼顯示登入成功呢?這裡通過訪問http://www.v2ex.com/settings 即可,因為這個網址沒有登入是看不了的:

Python模擬登入requests.Session應用詳解

經過上面的分析,寫出原始碼(參考了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())

然後執行發現成功登入:

Python模擬登入requests.Session應用詳解

上面趴下來的網頁原始碼即為http://www.v2ex.com/settings的程式碼。這裡once為91279.

Python模擬登入requests.Session應用詳解

至此,登入成功。

到此這篇關於Python模擬登入requests.Session應用詳解的文章就介紹到這了,更多相關Python模擬登入requests.Session內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!