摘要:今天想做一個微博爬個人頁面的工具,滿足一些不可告人的秘密。那么首先就要做那件必做之事模擬登陸代碼是參考了我對代碼進行了優化,重構成了版本,并且加入了大量注釋方便大家學習。接下來再請求這個,這樣就成功登錄到微博了。
今天想做一個微博爬個人頁面的工具,滿足一些不可告人的秘密。那么首先就要做那件必做之事!模擬登陸……
代碼是參考了:https://www.douban.com/note/2...
我對代碼進行了優化,重構成了Python 3.6 版本,并且加入了大量注釋方便大家學習。
PC 登錄新浪微博時, 在客戶端用js預先對用戶名、密碼都進行了加密, 而且在POST之前會GET 一組參數,這也將作為POST_DATA 的一部分。 這樣, 就不能用通常的那種簡單方法來模擬POST 登錄( 比如 人人網 )。
1.在提交POST請求之前, 需要GET 獲取兩個參數。
地址是:
http://login.sina.com.cn/sso/...
得到的數據中有 servertime 和 nonce 的值, 是隨機的,其他值貌似沒什么用。
def get_servertime(): url = "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939" # 返回出來的是一個Response對象,無法直接獲取,text后,可以通過正則匹配到 # 大概長這樣子的:sinaSSOController.preloginCallBack({"retcode":0,"servertime":1545606770, ...}) data = requests.request("GET", url).text p = re.compile("((.*))") try: json_data = p.search(data).group(1) data = json.loads(json_data) servertime = str(data["servertime"]) nonce = data["nonce"] return servertime, nonce except: print("獲取 severtime 失敗!") return None2.
通過httpfox 觀察POST 的數據, 參數較復雜,其中 “su" 是加密后的username, sp 是加密后的password。servertime 和 nonce 是上一步得到的。其他參數是不變的。
username 經過了BASE64 計算:
username = base64.encodestring( urllib.quote(username) )[:-1]
password 經過了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值來干擾。
即: 兩次SHA1加密后, 將結果加上 servertime 和 nonce 的值, 再SHA1 算一次。
def get_pwd(pwd, servertime, nonce): # 第一次計算,注意Python3 的加密需要encode,使用bytes pwd1 = hashlib.sha1(pwd.encode()).hexdigest() # 使用pwd1的結果在計算第二次 pwd2 = hashlib.sha1(pwd1.encode()).hexdigest() # 使用第二次的結果再加上之前計算好的servertime和nonce值,hash一次 pwd3_ = pwd2 + servertime + nonce pwd3 = hashlib.sha1(pwd3_.encode()).hexdigest() return pwd3 def get_user(username): # 將@符號轉換成url中能夠識別的字符 _username = urllib.request.quote(username) # Python3中的base64計算也是要字節 # base64出來后,最后有一個換行符,所以用了切片去了最后一個字符 username = base64.encodebytes(_username.encode())[:-1] return username3.
將參數組織好, POST請求。 這之后還沒有登錄成功。
POST后得到的內容中包含一句:
location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3")
這是登錄失敗時的結果, 登錄成功后結果與之類似, 不過retcode 的值是0 。
接下來再請求這個URL,這樣就成功登錄到微博了。
記得要提前build 緩存。
關注公眾號「Python專欄」,后臺回復「模擬微博登陸」,獲取全套微博自動登陸代碼。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43400.html
摘要:方法不僅適用于百度云,別的一些比較難以模擬登陸的網站都可以按照這種方式分析。本文要求讀者具有模擬登陸主要是抓包和閱讀代碼和密碼學的基本知識。和模擬登陸微博的分析流程一樣,我們首先要做的是以正常人的流程完整的登錄一遍百度網盤。 這是第二篇從簡書搬運過來的文章(大家別誤會,是我原創的)。因為前一篇文章,我看反響還挺好的,所以把這篇也搬運過來了,其實目的還是為宣傳自己的分布式微博爬蟲(該項目...
摘要:近幾日由于公司業務需要,要做一個網站的第三方登陸,并且登陸之后并進行驗證,只有登陸過我們手機的第三方賬號才可以登陸網站。只能百度,發現騰訊對于網站登陸和手機登陸拿到的是不一樣的,如果要想一樣得寫申請信給,簡直就是蛋疼。 近幾日由于公司業務需要,要做一個網站的第三方登陸,并且登陸之后并進行驗證,只有登陸過我們手機app的第三方賬號才可以登陸網站。 這邊先說下oauth2.0大概的流程吧...
摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...
摘要:但今年各種搶票軟件的橫行,還有官方出的加速包,導致連黃牛都不敢保證能買到票。今天我就給大家介紹一個開源的搶票程序,親測有效我身邊已經有很多好友,通過這個程序搶到車票了。這個庫是用來在上同步校準當地時間的。 showImg(https://segmentfault.com/img/remote/1460000017814865); 閱讀文本大概需要 6.6 分鐘。 又到了一年一度的搶票大...
摘要:當我們試圖從新浪微博抓取數據時,我們會發現網頁上提示未登錄,無法查看其他用戶的信息。三模擬登錄下面將介紹使用獲取新浪微博,然后使用提交從而實現模擬登錄。 當我們試圖從新浪微博抓取數據時,我們會發現網頁上提示未登錄,無法查看其他用戶的信息。模擬登錄是定向爬蟲制作中一個必須克服的問題,只有這樣才能爬取到更多的內容。 showImg(https://segmentfault.com/img/...
閱讀 1579·2021-10-18 13:35
閱讀 2359·2021-10-09 09:44
閱讀 813·2021-10-08 10:05
閱讀 2707·2021-09-26 09:47
閱讀 3560·2021-09-22 15:22
閱讀 427·2019-08-29 12:24
閱讀 1993·2019-08-29 11:06
閱讀 2853·2019-08-26 12:23