最近因爲某些緣由,須要用到Python模擬登陸網站,可是之前對這塊並不瞭解,並且目標網站的登陸方法較爲複雜, 因此一下卡在這裏了,因而我決定從簡單的模擬開始,逐漸深刻地研究下這塊。html
注:本文僅爲交流學習所用。python
會話對象requests.Session可以跨請求地保持某些參數,好比cookies,即在同一個Session實例發出的全部請求都保持同一個cookies,而requests模塊每次會自動處理cookies,這樣就很方便地處理登陸時的cookies問題。在cookies的處理上會話對象一句話能夠頂過好幾句urllib模塊下的操做。即至關於urllib中的:cookie
cj = http.cookiejar.CookieJar() pro = urllib.request.HTTPCookieProcessor(cj) opener = urllib.request.build_opener(pro) urllib.request.install_opener(opener)
本篇文章的任務是利用request.Session模擬登陸V2EX(http://www.v2ex.com/)這個網站,即V站。session
工具: Python 3.5,BeautifulSoup模塊,requests模塊,Chrome工具
這個網站登陸的時候抓到的數據以下:post
其中用戶名(u)、密碼(p)都是明文傳輸的,很方便。once的話從分析登陸URL: http://www.v2ex.com/signin 的源文件(下圖)能夠看出,應該是每次登陸的特有數據,咱們須要提早把它抓出來再放到Form Data裏面POST給網站。學習
抓出來仍是老方法,用BeautifulSoup神器便可。這裏又學到一種抓標籤裏面元素的方法,好比抓上面的"value",用soup.find('input',{'name':'once'})['value']便可網站
即抓取含有 name="once"的input標籤中的value對應的值。ui
因而構建postData,而後POST。url
怎麼顯示登陸成功呢?這裏經過訪問 http://www.v2ex.com/settings 便可,由於這個網址沒有登陸是看不了的:
通過上面的分析,寫出源代碼(參考了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())
而後運行發現成功登陸:
上面趴下來的網頁源代碼即爲http://www.v2ex.com/settings的代碼。這裏once爲91279.
至此,登陸成功。