Python 模擬微博登陸,親測有效!

2021-09-29 06:06:08 字數 2281 閱讀 7899

今天想做乙個微博爬個人頁面的工具,滿足一些不可告人的秘密。那麼首先就要做那件必做之事!模擬登陸……

**是參考了:https://www.

45/,我對**進行了優化,重構成了python 3.6 版本,並且加入了大量注釋方便大家學習。

在提交post請求之前,需要get 獲取兩個引數。位址是:http://

login.sina.com.cn/sso/l

ogin.php?client=ssologin.js(v1.3.18)

。得到的資料中有 servertime 和 nonce 的值, 是隨機的,其他值貌似沒什麼用。

def get_servertime():

url = ''

# 返回出來的是乙個response物件,無法直接獲取,text後,可以通過正則匹配到

# 大概長這樣子的:sinassocontroller.prelogincallback()

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 none

通過 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 username

將引數組織好,post請求。這之後還沒有登入成功,post後得到的內容中包含一句:

location.replace("")
這是登入失敗時的結果,登入成功後結果與之類似,不過 retcode 的值是0。接下來再請求這個url,這樣就成功登入到微博了。記得要提前build 快取

作者簡介:上海小胖,四大諮詢的tech lead,mongodb professional獲得者。「python專欄」專注python領域的各種技術:爬蟲、devops、人工智慧、web開發等。還有「大航海計畫」,各種內推活動。

微博模擬登陸

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

httpclient模擬登陸微博問題

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

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

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