手把手教你模擬登錄

什么?登錄?還模擬登錄?

登錄一個網(wǎng)頁對于我們再熟悉不過了。無論是生活當(dāng)中登錄網(wǎng)頁獲取MM圖片,或者是工作當(dāng)中登錄公司網(wǎng)站(如WIKI,jira等)。球都嘛得。。雖然我每天都登錄,但是我可以儲存自己的賬號和密碼???為什么要模擬登錄?

舉個李子,拿額們公司需求為例,之前每次發(fā)版,都要從我們公司的wiki里面手動拷貝需求列表,然后發(fā)送質(zhì)量報告郵件。這樣繁瑣重復(fù)的工作我們當(dāng)然不能忍啦,就想著可以通過腳本實現(xiàn)自動化(畢竟我們勤奮的目的就是將來讓我們變得更懶,??)。

吶,有了這個構(gòu)思,我們就開始實戰(zhàn)吧!

這里我選用python完成這一工作,畢竟在爬蟲領(lǐng)域無出其右者。你可以選擇urllib來實現(xiàn),這里我用requests來實現(xiàn)。

requests庫實現(xiàn)模擬登錄獲取數(shù)據(jù)其實大概分三部曲:

get請求登錄url->post請求進行登錄操作->對相應(yīng)的url進行數(shù)據(jù)獲取


第一、get請求登錄url

為什么要這樣做?這里可能會有些疑惑,我們直接攜帶我們的登錄賬號和密碼,post請求不就登錄上去來么?這一步的意義是什么?

是這樣的,我們的登錄操作看似只是填寫來用戶名和密碼,但是有些網(wǎng)站它會攜帶用戶不可見的token作為參數(shù)進行傳遞。我們可以看下圖:

查看token

有些網(wǎng)站都會將這些token也作為參數(shù)進行傳遞,讓服務(wù)器端進行校驗。

那。。我們寫死,也傳這個token,value直接傳這個content的值,不可以么?

遺憾的是,大部分網(wǎng)站的登錄token通過每次的get請求都是不同的,可能這次你請求的是這個token,下次就完全變了樣了。。

這個時候,requests.session就給我們極大的便利咯。平常情況下,我們都是直接requests.get或者requests.post進行網(wǎng)絡(luò)數(shù)據(jù)請求。而你每進行一次這種操作都可以理解為你重新打開了一個新的網(wǎng)頁,而session的好處是它可以保證我們操作的是同一個頁面。這次我們先初始化一個session:

mySession = requests.session()

然后我們用session去請求login_url:

response = mySession.get(login_url, verify=False).text

現(xiàn)在我們就得到登錄的各種數(shù)據(jù)了,怎么拿到這個token呢?因為這里我們只拿token,所以可以略使小技,用一個寫死的正則表達式來獲取:

strToken = r'''<meta id="atlassian-token" name="atlassian-token" content=(.*?)>'''

userToken = re.findall(strToken, response)[0]

到這一步,我們就完成第一步咯!

第二、post請求進行登錄操作

其實這一步就很簡單了,也不一定用post進行登錄,根據(jù)不同的網(wǎng)站用不同請求。先把我們剛剛獲取的token放入?yún)?shù)dict:

loginPayload = {'atlassian-token':userToken, 'login':你的用戶名,'password':你的密碼}

這里仍然用剛剛初始化的那個session:

loginResult = mySession.post(login_url, data=loginPayload)

這樣,我們就完成了登錄操作。

第三、對相應(yīng)的url進行數(shù)據(jù)獲取

這一步就更加簡單了,直接對需要獲取數(shù)據(jù)的url進行爬取就可以了

queryResponse = mySession.get(queryUrl, verify=False)

?其中queryUrl就是你要爬取數(shù)據(jù)的鏈接,后續(xù)可以手動進行傳入。

獲取到queryResponse之后,剩下的就是對數(shù)據(jù)進行解析的操作了。你可以利用高大上的beautifulsoup,也可以用python的htmlpaser,或者xpath等等,相信后續(xù)操作大家都知道怎么辦啦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容