相關(guān)文章:
抖音 x-gorgon 03 免費(fèi)生成接口 抖音6.3.0版本
抖音爬蟲從0到1-第二彈:獲取抖音用戶數(shù)據(jù)
前言
前面介紹了分析了抖音請(qǐng)求header中的X-gorgon的獲取方法氧骤,同時(shí)在分析獲取抖音用戶數(shù)據(jù)的時(shí)候谦秧,我們發(fā)現(xiàn)爬取抖音用戶的數(shù)據(jù)需要使用用戶的user_id和sec_user_id荆姆,我們通過抓包工具獲取用戶的id以及sec_user_id独悴,然后通過用戶的關(guān)注列表和follow列表獲取更多的用戶的user_id和sec_user_id摹闽,下面我將介紹一下如何根據(jù)user_id和sec_user_id來獲取抖音用戶的詳細(xì)數(shù)據(jù)壁却。
一披坏、分析請(qǐng)求用戶數(shù)據(jù)的api
1. 用戶數(shù)據(jù)抓包
首先在搭建好的環(huán)境中通過Fiddle抓取用戶數(shù)據(jù)包撼唾。
2. 用戶數(shù)據(jù)包分析
2.1. 請(qǐng)求信息分析
- 請(qǐng)求頭字段
字段 | 字段值 |
---|---|
請(qǐng)求方法 | GET |
請(qǐng)求的api | GET后面的 |
請(qǐng)求的協(xié)議 | api后面的输涕,系http1.1 |
請(qǐng)求的目的主機(jī)域名 | aweme-eagle.snssdk.com |
連接信息 | keep-alive |
Cookie | 你自己的cookies |
Accept-Encoding 編碼信息 | gzip |
X-SS-QUERIES | 請(qǐng)求的query |
token | 你自己的token |
sdk版本 | 1 |
User-Agent | 用戶代理 |
X-Khronos | 咱也不知道是啥音婶,但是本質(zhì)上就是個(gè)時(shí)間戳 |
X-Gorgon | 加密驗(yàn)證的部分,獲取方法如前文 |
X-Pods | 咱也不知道是啥莱坎,但是貌似沒有用 |
- 請(qǐng)求的api分析
我們知道了請(qǐng)求的api以及請(qǐng)求頭里面都包含了哪些信息衣式,我們就可以通過手動(dòng)構(gòu)造對(duì)應(yīng)的請(qǐng)求參數(shù)來爬取用戶的數(shù)據(jù)了。我已經(jīng)在前面的文章獲取到了1W+ 的用戶的uid以及sec_user_id的數(shù)據(jù)了檐什,然后我們就可以通過這些數(shù)據(jù)來爬取用戶的詳細(xì)數(shù)據(jù)碴卧。
2.2. 響應(yīng)信息分析
二、獲取用戶數(shù)據(jù)
1.構(gòu)造請(qǐng)求api
在文章抖音爬蟲從0到1-第二彈:獲取抖音用戶數(shù)據(jù) 我們已經(jīng)介紹了爬取抖音關(guān)注列表的api及其構(gòu)造方法乃正,其實(shí)獲取用戶詳細(xì)信息和獲取用戶的關(guān)注列表的api基本一致住册,主要都是需要我們自行填充用戶的user_id以及用戶的sec_user_id還有一大堆的時(shí)間戳信息,其他的信息都是不變的瓮具。下面我們構(gòu)造獲取用戶詳細(xì)信息的api
def construct_api(user_id, _rticket, ts, sec_user_id):
"""
api 構(gòu)造函數(shù)
:param user_id: 用戶的id
:param _rticket: 時(shí)間戳
:param ts: 時(shí)間戳
:param sec_user_id: 用戶的加密的id
:return: api
"""
api = "https://aweme-eagle.snssdk.com" \
"/aweme/v1/user/?" \
"user_id={}" \
"&retry_type=no_retry" \
"&iid=18468154xxxx40845" \
"&device_id=4701xxxx7444" \
"&ac=wifi&channel=wandoujia_aweme1" \
"&aid=1128&app_name=aweme" \
"&version_code=630" \
"&version_name=6.3.0" \
"&device_platform=android" \
"&ssmix=a&device_type=HUAWEI+NXT-AL10" \
"&device_brand=HUAWEI&language=zh" \
"&os_api=26&os_version=8.0.0" \
"&openudid=b202a2xxxx8c1538a" \
"&manifest_version_code=630" \
"&resolution=1080*1812" \
"&dpi=480&update_version_code=6302" \
"&_rticket={}" \
"&js_sdk_version=1.16.3.5" \
"&ts={}" \
"&sec_user_id={}" \
"".format(user_id, _rticket, ts, sec_user_id)
return api
2.構(gòu)造請(qǐng)求頭
上文我們已經(jīng)分析了請(qǐng)求頭荧飞,請(qǐng)求頭的構(gòu)造也比較方便凡人,大部分內(nèi)容都是固定的,需要我們填充的主要還是幾個(gè)時(shí)間戳以及對(duì)應(yīng)的X-Gorgon,其中X-Gorgon的構(gòu)造方法比較復(fù)雜叹阔,在文章“抖音 x-gorgon 03 免費(fèi)生成接口 抖音6.3.0版本”中我已經(jīng)提供了一個(gè)生成X-Gorgon的接口挠轴,但是要注意填入正確的Cookie和Token你才能獲得可用的X-Gorgon,否則你的Gorgon就是不可用的耳幢。下圖是請(qǐng)求頭里面的主要信息:
下面我寫了一個(gè)構(gòu)造請(qǐng)求頭的函數(shù):
def construct_header(user_id, sec_user_id, cookie, query, token, user_agent, _rticket, ts):
"""
構(gòu)造請(qǐng)求頭岸晦,需要傳入的參數(shù)如下
:param user_id: 要爬取的用戶的uid
:param sec_user_id: 要爬取的用戶的加密的id
:param cookie: cookie
:param query: 請(qǐng)求的query
:param token: 你的token
:param user_agent: 請(qǐng)求的user_agent
:param _rticket: 時(shí)間戳(毫秒級(jí))
:param ts: 時(shí)間戳(秒級(jí))
:return: 構(gòu)造好的請(qǐng)求頭:headers
"""
api = construct_api(user_id, _rticket, ts, sec_user_id)
headers = {
"Host": "aweme-eagle.snssdk.com",
"Connection": "keep-alive",
"Cookie": cookie,
"Accept-Encoding": "gzip",
"X-SS-QUERIES": query,
"X-SS-REQ-TICKET": _rticket,
"X-Tt-Token": token,
"sdk-version": "1",
"User-Agent": user_agent
}
x_gorgon = get_gorgon(api, cookie, token, query)
headers["X-Khronos"] = ts
headers["X-Gorgon"] = x_gorgon
print(headers)
return headers
def get_gorgon(url, cookies, token, query):
"""
獲取headers里面的X-Gorgon
:param url: 請(qǐng)求的api
:param cookies: 你的cookie
:param token: 你的token
:param query: 你的query
:return: gorgon
"""
# 發(fā)起請(qǐng)求獲取X-Gorgon
headers = {
"dou-url": url, # 填寫對(duì)應(yīng)的請(qǐng)求的api
"dou-cookies": cookies, # 填寫你的cookies
"dou-token": token, # 填寫你的token
"dou-queries": query # 填寫你的請(qǐng)求的queries
}
gorgon_host = "http://8.131.59.252:8080"
res = requests.get(gorgon_host, headers=headers)
gorgon = ""
if res.status_code == 200:
print("請(qǐng)求成功")
res_gorgon = json.loads(res.text)
if res_gorgon.get("status") == 0:
print("成功獲取 X-Gorgon")
print(res_gorgon.get("X-gorgon")) # 你就可以用來爬數(shù)據(jù)了
gorgon = res_gorgon.get("X-gorgon")
else:
print("獲取 X-Gorgon 失敗")
print(res_gorgon.get("reason"))
raise ValueError(res_gorgon.get("reason"))
else:
print("請(qǐng)求發(fā)送錯(cuò)誤/可能是你的網(wǎng)絡(luò)錯(cuò)誤,也可能是我的錯(cuò)誤睛藻,但是大概率是你那邊的錯(cuò)誤")
raise ValueError("請(qǐng)求發(fā)送錯(cuò)誤/可能是你的網(wǎng)絡(luò)錯(cuò)誤启上,也可能是我的錯(cuò)誤,但是大概率是你那邊的錯(cuò)誤")
return gorgon
3. 請(qǐng)求頭弄好了我們就可以獲取用戶數(shù)據(jù)了
def get_user_detail_info(cookie, query, token, user_agent, user_id, sec_user_id):
"""
爬取用戶數(shù)據(jù)
:param cookie: 你自己的cookie
:param query: 你自己的query
:param token: 你自己的token
:param user_agent: 你自己的User-Agent
:param user_id: 用戶的uid
:param sec_user_id: 用戶的加密的uid
:return: response
"""
_rticket = str(time.time() * 1000).split(".")[0]
ts = str(time.time()).split(".")[0]
api = construct_api(user_id, _rticket, ts, sec_user_id)
headers = construct_header(user_id, sec_user_id, cookie, query, token, user_agent, _rticket, ts)
print(api)
req = request.Request(api)
for key in headers:
req.add_header(key, headers[key])
with request.urlopen(req) as f:
data = f.read()
return gzip.decompress(data).decode()
4. 解析用戶數(shù)據(jù)
根據(jù)上面對(duì)響應(yīng)數(shù)據(jù)的分析店印,其對(duì)應(yīng)的響應(yīng)數(shù)據(jù)是json格式的冈在,而且數(shù)據(jù)特別多,分析了一下吱窝,我找了一些對(duì)我比較有用的數(shù)據(jù):
# 用戶的抖音號(hào)
unique_id=345*****5O
# 用戶的user_id
uid=103600*****654544
# 用戶的 sec_user_id
sec_uid=MS4wLjABAAAA2******************dWepfg9nUc5wQy0
# 頭像地址
avatar_uri=26e88000************cddd496
# 用戶的昵稱
nickname=成****榜
# 用戶的簽名
signature=謝謝關(guān)注?
# 用戶的出生日期
birthday=1995-01-01
# 用戶的國(guó)家
country=中國(guó)
# 用戶的省份
province=四川
# 用戶的城市
city=成都
# 用戶所在的區(qū)域
district=武侯
# 用戶的粉絲數(shù)
follower_count=929219
# 用戶的關(guān)注數(shù)
following_count=15
# 發(fā)布的抖音數(shù)量
aweme_count=453
# 發(fā)布的動(dòng)態(tài)數(shù)量
dongtai_count=480
# 用戶點(diǎn)贊的視頻數(shù)
favoriting_count=322
# 總共被點(diǎn)贊的次數(shù)
total_favorited=14900700
5. 下面就可以爬取數(shù)據(jù)了
if __name__ == '__main__':
cookie = "" # 你自己的cookie
token = "" # 你自己的token
query = "" # 你自己的query
user_agent = "" # 你自己的user-agent
user_id = 103600654544
sec_user_id = "MS4wLjABAAAA2_HUlxau0riJ8UBMwyd_bUtA8yzKdWepfg9nUc5wQy0"
res = get_user_detail_info(cookie,query, token, user_agent, user_id, sec_user_id)
print(res)
三讥邻、總結(jié)
以上就是爬取用戶信息的全部?jī)?nèi)容,碼字不易院峡,還請(qǐng)點(diǎn)贊關(guān)注兴使,有任何問題請(qǐng)留言.