摘要:今天想做一個(gè)微博爬個(gè)人頁(yè)面的工具,滿(mǎn)足一些不可告人的秘密。那么首先就要做那件必做之事模擬登陸代碼是參考了我對(duì)代碼進(jìn)行了優(yōu)化,重構(gòu)成了版本,并且加入了大量注釋方便大家學(xué)習(xí)。接下來(lái)再請(qǐng)求這個(gè),這樣就成功登錄到微博了。
今天想做一個(gè)微博爬個(gè)人頁(yè)面的工具,滿(mǎn)足一些不可告人的秘密。那么首先就要做那件必做之事!模擬登陸……
代碼是參考了:https://www.douban.com/note/2...
我對(duì)代碼進(jìn)行了優(yōu)化,重構(gòu)成了Python 3.6 版本,并且加入了大量注釋方便大家學(xué)習(xí)。
PC 登錄新浪微博時(shí), 在客戶(hù)端用js預(yù)先對(duì)用戶(hù)名、密碼都進(jìn)行了加密, 而且在POST之前會(huì)GET 一組參數(shù),這也將作為POST_DATA 的一部分。 這樣, 就不能用通常的那種簡(jiǎn)單方法來(lái)模擬POST 登錄( 比如 人人網(wǎng) )。
1.在提交POST請(qǐng)求之前, 需要GET 獲取兩個(gè)參數(shù)。
地址是:
http://login.sina.com.cn/sso/...
得到的數(shù)據(jù)中有 servertime 和 nonce 的值, 是隨機(jī)的,其他值貌似沒(méi)什么用。
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" # 返回出來(lái)的是一個(gè)Response對(duì)象,無(wú)法直接獲取,text后,可以通過(guò)正則匹配到 # 大概長(zhǎng)這樣子的: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.
通過(guò)httpfox 觀察POST 的數(shù)據(jù), 參數(shù)較復(fù)雜,其中 “su" 是加密后的username, sp 是加密后的password。servertime 和 nonce 是上一步得到的。其他參數(shù)是不變的。
username 經(jīng)過(guò)了BASE64 計(jì)算:
username = base64.encodestring( urllib.quote(username) )[:-1]
password 經(jīng)過(guò)了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值來(lái)干擾。
即: 兩次SHA1加密后, 將結(jié)果加上 servertime 和 nonce 的值, 再SHA1 算一次。
def get_pwd(pwd, servertime, nonce): # 第一次計(jì)算,注意Python3 的加密需要encode,使用bytes pwd1 = hashlib.sha1(pwd.encode()).hexdigest() # 使用pwd1的結(jié)果在計(jì)算第二次 pwd2 = hashlib.sha1(pwd1.encode()).hexdigest() # 使用第二次的結(jié)果再加上之前計(jì)算好的servertime和nonce值,hash一次 pwd3_ = pwd2 + servertime + nonce pwd3 = hashlib.sha1(pwd3_.encode()).hexdigest() return pwd3 def get_user(username): # 將@符號(hào)轉(zhuǎn)換成url中能夠識(shí)別的字符 _username = urllib.request.quote(username) # Python3中的base64計(jì)算也是要字節(jié) # base64出來(lái)后,最后有一個(gè)換行符,所以用了切片去了最后一個(gè)字符 username = base64.encodebytes(_username.encode())[:-1] return username3.
將參數(shù)組織好, POST請(qǐng)求。 這之后還沒(méi)有登錄成功。
POST后得到的內(nèi)容中包含一句:
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")
這是登錄失敗時(shí)的結(jié)果, 登錄成功后結(jié)果與之類(lèi)似, 不過(guò)retcode 的值是0 。
接下來(lái)再請(qǐng)求這個(gè)URL,這樣就成功登錄到微博了。
記得要提前build 緩存。
關(guān)注公眾號(hào)「Python專(zhuān)欄」,后臺(tái)回復(fù)「模擬微博登陸」,獲取全套微博自動(dòng)登陸代碼。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/43400.html
摘要:方法不僅適用于百度云,別的一些比較難以模擬登陸的網(wǎng)站都可以按照這種方式分析。本文要求讀者具有模擬登陸主要是抓包和閱讀代碼和密碼學(xué)的基本知識(shí)。和模擬登陸微博的分析流程一樣,我們首先要做的是以正常人的流程完整的登錄一遍百度網(wǎng)盤(pán)。 這是第二篇從簡(jiǎn)書(shū)搬運(yùn)過(guò)來(lái)的文章(大家別誤會(huì),是我原創(chuàng)的)。因?yàn)榍耙黄恼?,我看反響還挺好的,所以把這篇也搬運(yùn)過(guò)來(lái)了,其實(shí)目的還是為宣傳自己的分布式微博爬蟲(chóng)(該項(xiàng)目...
摘要:近幾日由于公司業(yè)務(wù)需要,要做一個(gè)網(wǎng)站的第三方登陸,并且登陸之后并進(jìn)行驗(yàn)證,只有登陸過(guò)我們手機(jī)的第三方賬號(hào)才可以登陸網(wǎng)站。只能百度,發(fā)現(xiàn)騰訊對(duì)于網(wǎng)站登陸和手機(jī)登陸拿到的是不一樣的,如果要想一樣得寫(xiě)申請(qǐng)信給,簡(jiǎn)直就是蛋疼。 近幾日由于公司業(yè)務(wù)需要,要做一個(gè)網(wǎng)站的第三方登陸,并且登陸之后并進(jìn)行驗(yàn)證,只有登陸過(guò)我們手機(jī)app的第三方賬號(hào)才可以登陸網(wǎng)站。 這邊先說(shuō)下oauth2.0大概的流程吧...
摘要:以下這些項(xiàng)目,你拿來(lái)學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲(chóng)達(dá)到效率最高,也就是所謂的爬蟲(chóng)策略問(wèn)題,爬蟲(chóng)策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲(chóng)的設(shè)計(jì)方案,比如說(shuō)。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過(guò)一遍Python最基本的知識(shí),比如說(shuō):變量、數(shù)據(jù)結(jié)構(gòu)、語(yǔ)法...
摘要:但今年各種搶票軟件的橫行,還有官方出的加速包,導(dǎo)致連黃牛都不敢保證能買(mǎi)到票。今天我就給大家介紹一個(gè)開(kāi)源的搶票程序,親測(cè)有效我身邊已經(jīng)有很多好友,通過(guò)這個(gè)程序搶到車(chē)票了。這個(gè)庫(kù)是用來(lái)在上同步校準(zhǔn)當(dāng)?shù)貢r(shí)間的。 showImg(https://segmentfault.com/img/remote/1460000017814865); 閱讀文本大概需要 6.6 分鐘。 又到了一年一度的搶票大...
摘要:當(dāng)我們?cè)噲D從新浪微博抓取數(shù)據(jù)時(shí),我們會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)上提示未登錄,無(wú)法查看其他用戶(hù)的信息。三模擬登錄下面將介紹使用獲取新浪微博,然后使用提交從而實(shí)現(xiàn)模擬登錄。 當(dāng)我們?cè)噲D從新浪微博抓取數(shù)據(jù)時(shí),我們會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)上提示未登錄,無(wú)法查看其他用戶(hù)的信息。模擬登錄是定向爬蟲(chóng)制作中一個(gè)必須克服的問(wèn)題,只有這樣才能爬取到更多的內(nèi)容。 showImg(https://segmentfault.com/img/...
閱讀 1713·2021-10-18 13:35
閱讀 2443·2021-10-09 09:44
閱讀 933·2021-10-08 10:05
閱讀 2883·2021-09-26 09:47
閱讀 3777·2021-09-22 15:22
閱讀 516·2019-08-29 12:24
閱讀 2100·2019-08-29 11:06
閱讀 2939·2019-08-26 12:23