一:前言
今天看了一篇安利Charles這個軟件的文章授帕,就拿來試試侥祭,我們大學(xué)的登錄頁面用開發(fā)者模式進(jìn)去chrome有屏蔽相關(guān)模塊平痰,用火狐可以正常不過還是抓不到驗(yàn)證碼這個js動態(tài)數(shù)據(jù)而且?guī)ぬ柮艽a的請求后Cookies并找不到款违。那么這個時候使用抓包軟件就是一個好的方法之一了藕坯,之前也用過其他抓包軟件团南,比如Fidder,今天用過Charles后才發(fā)現(xiàn)還有比Fidder好用的抓包軟件炼彪,這個比較簡潔吐根,數(shù)據(jù)查找也很直觀。
目標(biāo):使用抓包軟件Charles對頁面數(shù)據(jù)分析找到帳號密碼以及驗(yàn)證碼的接口辐马,然后用Python實(shí)現(xiàn)模擬登錄拷橘,并提取登錄后的頁面。
二:運(yùn)行環(huán)境
Python3.6喜爷,我用的是Anaconda集成版本冗疮,方便管理各種模塊。
Charles版本是4.02贞奋,使用很簡單赌厅,數(shù)據(jù)顯示直觀。
三:實(shí)例分析
1.分析網(wǎng)站登錄情況轿塔,網(wǎng)址是http://my.hlju.edu.cn/login.portal 進(jìn)去之后用火狐的瀏覽器進(jìn)去開發(fā)者模式特愿,看到了驗(yàn)證碼地址captchaGenerate.portal?后面跟的隨機(jī)數(shù)字代表的不同的驗(yàn)證碼仲墨,我把這個配合主網(wǎng)址組成這個網(wǎng)址 http://my.hlju.edu.cn/captchaGenerate.portal? 在瀏覽器打開就是隨機(jī)的驗(yàn)證碼。
2.驗(yàn)證碼的網(wǎng)址已經(jīng)找到了揍障,現(xiàn)在我們使用Charles抓包工具目养,抓取登錄時的數(shù)據(jù)分析一下,這一張是抓包后的圖毒嫡。
3.然后點(diǎn)擊這個userPasswordValidate.portal癌蚁,可知道這個保存著登錄的全部數(shù)據(jù),我們點(diǎn)擊一下From數(shù)據(jù)就變得整潔多了兜畸,可以看到有幾個鍵值對這樣我們帳號密碼對應(yīng)地址也找到了努释,之后就可以開始用Python模擬登錄了。
Login.Token1 *******
Login.Token2 *******
captcha w4dy
goto http://my.hlju.edu.cn/loginSuccess.portal
gotoOnFail http://my.hlju.edu.cn/loginFailure.portal
四:實(shí)戰(zhàn)代碼
帳號密碼改成自己的學(xué)號密碼即可模擬登錄咬摇,之前爬蟲都沒有使用requests.session()伐蒂,這里就需要因?yàn)橛昧诉@個回話對象,可以使幾次請求都在同一個Cookie下進(jìn)行肛鹏,方便我們模擬登錄后獲取登錄后的主頁面逸邦。
會話對象讓你能夠跨請求保持某些參數(shù)。它也會在同一個 Session 實(shí)例發(fā)出的所有請求之間保持 cookie在扰, 期間使用 urllib3 connection pooling 功能缕减。所以如果你向同一主機(jī)發(fā)送多個請求,底層的 TCP 連接將會被重用芒珠,從而帶來顯著的性能提升桥狡。
import requests
from PIL import Image
from bs4 import BeautifulSoup
url1 = 'http://my.hlju.edu.cn/captchaGenerate.portal?'
url2 = 'http://my.hlju.edu.cn/userPasswordValidate.portal'
url3 = 'http://my.hlju.edu.cn'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
}
s = requests.session()
response = s.get(url1, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
with open('img\code.jpg', 'wb') as f:
f.write(response.content)
img = Image.open('img\code.jpg')
img.show()
data = {}
data['Login.Token1'] = '帳號'
data['Login.Token2'] = '密碼'
data['captcha'] = input('輸入驗(yàn)證碼:')
data['goto'] = 'http://my.hlju.edu.cn/loginSuccess.portal'
data['gotoOnFail'] = 'http://my.hlju.edu.cn/loginFailure.portal'
response2 = s.post(url=url2, data=data, headers=headers)
response3 = s.get(url3, headers=headers)
print(response3.text)
五:總結(jié)
這次練習(xí)了一下Charles抓包的使用和對抓包數(shù)據(jù)的分析,每天寫一寫小Demo妓局,繼續(xù)加油总放!
這里貼出我的github地址,我的爬蟲代碼和學(xué)習(xí)的基礎(chǔ)部分都放進(jìn)去了好爬,有喜歡的朋友一起學(xué)習(xí)交流吧局雄!github.com/rieuse/learnPython