抖音 x-gorgon 03 免費生成接口 抖音6.3.0版本
前言
前面介紹了分析了抖音請求header中的X-gorgon的獲取方法,同時在分析獲取抖音用戶數據的時候,我們發現爬取抖音用戶的數據需要使用用戶的user_id和sec_user_id,我們通過抓包工具獲取用戶的id以及sec_user_id,然后通過用戶的關注列表和follow列表獲取更多的用戶的user_id和sec_user_id,下面我將介紹一下如何根據user_id和sec_user_id來獲取抖音用戶的詳細數據。
一、分析請求用戶數據的api
1. 用戶數據抓包
首先在搭建好的環境中通過Fiddle抓取用戶數據包。
2. 用戶數據包分析
2.1. 請求信息分析
- 請求頭字段
字段 | 字段值 |
---|---|
請求方法 | GET |
請求的api | GET后面的 |
請求的協議 | api后面的,系http1.1 |
請求的目的主機域名 | aweme-eagle.snssdk.com |
連接信息 | keep-alive |
Cookie | 你自己的cookies |
Accept-Encoding 編碼信息 | gzip |
X-SS-QUERIES | 請求的query |
token | 你自己的token |
sdk版本 | 1 |
User-Agent | 用戶代理 |
X-Khronos | 咱也不知道是啥,但是本質上就是個時間戳 |
X-Gorgon | 加密驗證的部分,獲取方法如前文 |
X-Pods | 咱也不知道是啥,但是貌似沒有用 |
- 請求的api分析
我們知道了請求的api以及請求頭里面都包含了哪些信息,我們就可以通過手動構造對應的請求參數來爬取用戶的數據了。我已經在前面的文章獲取到了1W+ 的用戶的uid以及sec_user_id的數據了,然后我們就可以通過這些數據來爬取用戶的詳細數據(數據可以在微信公眾號里面獲取)。
2.2. 響應信息分析
二、獲取用戶數據
1.構造請求api
在文章抖音爬蟲從0到1-第二彈:獲取抖音用戶數據 我們已經介紹了爬取抖音關注列表的api及其構造方法,其實獲取用戶詳細信息和獲取用戶的關注列表的api基本一致,主要都是需要我們自行填充用戶的user_id以及用戶的sec_user_id還有一大堆的時間戳信息,其他的信息都是不變的。下面我們構造獲取用戶詳細信息的api
def construct_api(user_id, _rticket, ts, sec_user_id):
"""
api 構造函數
:param user_id: 用戶的id
:param _rticket: 時間戳
:param ts: 時間戳
:param sec_user_id: 用戶的加密的id
:return: api
"""
api = "https://aweme-eagle.snssdk.com" \
"/aweme/v1/user/?" \
"user_id={}" \
"&retry_type=no_retry" \
"&iid=1846815477740845" \
"&device_id=47012747444" \
"&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=b202a24eb8c1538a" \
"&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.構造請求頭
上文我們已經分析了請求頭,請求頭的構造也比較方便,大部分內容都是固定的,需要我們填充的主要還是幾個時間戳以及對應的X-Gorgon,其中X-Gorgon的構造方法比較復雜,在文章“抖音 x-gorgon 03 免費生成接口 抖音6.3.0版本”中我已經提供了一個生成X-Gorgon的接口,但是要注意填入正確的Cookie和Token你才能獲得可用的X-Gorgon,否則你的Gorgon就是不可用的。下圖是請求頭里面的主要信息:
下面我寫了一個構造請求頭的函數:
def construct_header(user_id, sec_user_id, cookie, query, token, user_agent, _rticket, ts):
"""
構造請求頭,需要傳入的參數如下
:param user_id: 要爬取的用戶的uid
:param sec_user_id: 要爬取的用戶的加密的id
:param cookie: cookie
:param query: 請求的query
:param token: 你的token
:param user_agent: 請求的user_agent
:param _rticket: 時間戳(毫秒級)
:param ts: 時間戳(秒級)
:return: 構造好的請求頭: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: 請求的api
:param cookies: 你的cookie
:param token: 你的token
:param query: 你的query
:return: gorgon
"""
# 發起請求獲取X-Gorgon
headers = {
"dou-url": url, # 填寫對應的請求的api
"dou-cookies": cookies, # 填寫你的cookies
"dou-token": token, # 填寫你的token
"dou-queries": query # 填寫你的請求的queries
}
gorgon_host = "http://8.131.59.252:8080"
res = requests.get(gorgon_host, headers=headers)
gorgon = ""
if res.status_code == 200:
print("請求成功")
res_gorgon = json.loads(res.text)
if res_gorgon.get("status") == 0:
print("成功獲取 X-Gorgon")
print(res_gorgon.get("X-gorgon")) # 你就可以用來爬數據了
gorgon = res_gorgon.get("X-gorgon")
else:
print("獲取 X-Gorgon 失敗")
print(res_gorgon.get("reason"))
raise ValueError(res_gorgon.get("reason"))
else:
print("請求發送錯誤/可能是你的網絡錯誤,也可能是我的錯誤,但是大概率是你那邊的錯誤")
raise ValueError("請求發送錯誤/可能是你的網絡錯誤,也可能是我的錯誤,但是大概率是你那邊的錯誤")
return gorgon
3. 請求頭弄好了我們就可以獲取用戶數據了
def get_user_detail_info(cookie, query, token, user_agent, user_id, sec_user_id):
"""
爬取用戶數據
: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. 解析用戶數據
根據上面對響應數據的分析,其對應的響應數據是json格式的,而且數據特別多,分析了一下,我找了一些對我比較有用的數據:
# 用戶的抖音號
unique_id=345345345O
# 用戶的user_id
uid=103600654544
# 用戶的 sec_user_id
sec_uid=MS4wLjABAAAA2_HUlxau0riJ8UBMwyd_bUtA8yzKdWepfg9nUc5wQy0
# 頭像地址
avatar_uri=26e880003aefb8cddd496
# 用戶的昵稱
nickname=成都潮人榜
# 用戶的簽名
signature=謝謝關注❤
# 用戶的出生日期
birthday=1995-01-01
# 用戶的國家
country=中國
# 用戶的省份
province=四川
# 用戶的城市
city=成都
# 用戶所在的區域
district=武侯
# 用戶的粉絲數
follower_count=929219
# 用戶的關注數
following_count=15
# 發布的抖音數量
aweme_count=453
# 發布的動態數量
dongtai_count=480
# 用戶點贊的視頻數
favoriting_count=322
# 總共被點贊的次數
total_favorited=14900700
5. 下面就可以爬取數據了
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)
三、總結
以上就是爬取用戶信息的全部內容,完整代碼可以關注公眾號獲取。碼字不易,還請點贊關注,有任何問題請留言,或者關注下方微信公眾號獲取抖音安裝包以及Fiddle安裝包等。last but not least
有任何問題,或者想要獲取對應的抖音APK和抓包軟件或者相關代碼,可以關注下方公眾號留言,我會及時傾盡所有問您解答
last and least
如果文章對你有用並且恰好您也手頭富裕,可以考慮捐贈一毛錢,我可以升級服務器。