新浪微博自動(模擬)登陸詳解及實現

2021-09-26 05:10:08 字數 2151 閱讀 5179

由於模擬登陸微博是爬蟲爬取微博資訊的第一

此過程主要分兩步:

2  有了cookie資訊後,利用cookie資訊直接訪問微博url。

其中,第一步是這裡討論的重點。要想能更好的模擬這一步,乙個好的網路監視工具是必須的,可以使用firefox的firebug和chrome及ie自 帶的開發工具(注意下,ie必須ie9以上版本才有監視網路的功能,chrome的網路互動報文可以到network部分檢視)

。此外,前兩天發現python支援的包比較多,用python定製自己的網路報文比較方便,所以此處我就採用python作為我的開發語言了。

好了,前提工作先說到這裡,下面開始分析一下使用者在登陸sina微博的過程中都進行了那些操作。下面的例子中我使用的是chrome自帶的開發者工具作為我的網路報文監視工具的。

首先,開啟

如果你以前設定過讓瀏覽器自動記住密碼並自動登陸,你需要清楚一下cookie),之後通過網路監視工具,我們會發現在使用者登入過程中,瀏覽器與伺服器有三次互動,分別如下:

一、第一次get請求獲取一些引數

在使用者名稱一欄輸入你的微博賬號,然後確定,這時你會發現,當你的焦點離開使用者名稱輸入框之後,瀏覽器會自動向 「 callback=sinassocontroller.prelogincallback&su=&rsakt=mod& checkpin=1&client=ssologin.js(v1.4.5)&_=1362808219583」傳送乙個get請求, 如下:

二、傳送post請求

這一部分是整個登陸過程的重點。該部分用來提交使用者資訊給伺服器並由伺服器判斷使用者資訊是否正確,從而判斷是否登陸成功。

通過chrome自帶的開發者工具,可以觀察post報文的相關資訊(url、headers、data),下圖是我的post資訊的截圖:

url資訊如下:

報文headers資訊如下:

post的報文資料資訊如下:

其中, 「su" 是加密後的username,"sp"是加密後的password。"servertime"、」nonce"和"rsakv"是上一步get請求返回的 json串中的內容。其他引數是不變的。然後,著重介紹一下"su"和"sp"的加密演算法。

1. "su"的加密演算法

su是username經過base64計算得來的:su = base64.encodestring( urllib.quote(username) )[:-1];

2. "sp"的加密演算法

在這裡簡單介紹一下rsa演算法的解密過程。

2.2  

這兩個值需要先從16進製制轉換成10進製,不過也可以寫死在**裡。我就把『10001』直接寫死為65537

rsapublickey 

=int

(pubkey,16

) key 

=rsa

.publickey

(rsapublickey

,65537

)#建立公鑰

message 

=str

(servertime)+

'\t'

+str

(nonce)+

'\n'

+str

(password

)#拼接明文

js加密檔案中得到

passwd 

=rsa

.encrypt

(message

,key

)#加密

passwd 

=binascii

.b2a_hex

(passwd

)#將加密資訊轉換為

16進製制。

如果以上各步你都進展的比較順利的話,你會得到如下響應:

三、跳轉到對應微博頁面

上面我們已經得到了待跳轉的url,所以現在只需請求這個url即可。在這裡有一點需要注意一下,要想伺服器知道你是否登陸,這一步的請求需要用到前面操 作的cookie資訊(因為第二步中登陸成功與否的資訊會自動記錄在cookie中),所以我們在整個程式的一開始要開啟cookie,保證以後的操作都 能正確的使用cookie,同時,對於python的使用者,這一步就不要自己去定製header了,因為在預設情況下urllib2會自動打包 cookie資訊的如果人為去定製header時可能會漏掉cookie資訊。

微博模擬登陸

因公司需求,需要爬取微博相關大v的賬號以及相關資訊,一開始是直接爬取,發現只可以爬取10條資料 沒有登陸的情況下 所以就涉及到模擬登陸。import requests import json import base64 from lxml import etree from bs4 import b...

Python 新浪微博爬蟲之模擬登陸

目前,親測能用的步驟是 通過預登入,使用get方法,獲得登入所需的servertime,nonce,pubkey,rsakv 使用encode64加密使用者名稱,使用rsa演算法加密密碼 登入。步驟一 response格式為 換行是我自己加上去的 sinassocontroller.prelogin...

httpclient模擬登陸微博問題

我用httpclient模擬登陸微博報如下錯誤 debug requestaddcookies cookie version 0 name usrhawb value usrmdins212 186 domain weibo.com path expiry null match weibo.com ...