=========================================================
服务器将在2021/01/30过期,届时接口将没法用了,所以很抱歉哦
=========================================================
最近老板让爬取一下抖音数据,最新版本的总是抓不到包,所以我就选择使用旧版本的抖音app,通过分析抖音数据请求包,我们发现其中最难拿到的就是 “X-Gorgon”值:
请求包格式如下:
GET 后面是请求的api-我们可以自己构造
Host: 这是请求的host
Connection: keep-alive # 这个不重要
Cookie: 这里是我们自己的cookies
Accept-Encoding: gzip # 这个不重要
X-SS-REQ-TICKET: 1605670443023 # 这就是一个时间戳
X-Tt-Token: 这是我们自己的Token
sdk-version: 1 # 这个不重要
User-Agent: 这是我们的agent
X-Khronos: 1605670443 # 这就是一个时间戳
# --------------------------------------------------------------
X-Gorgon: 0300ccc000007c----- # 这个东西不好拿到(这篇博客的核心)|
# --------------------------------------------------------------
X-Pods: 这个没有用
反编译apk获取X-gorgon生成过程:
通过反编译对应版本的抖音APK(这里是6.3.0版本的),我们发现对应的X-Gorgon是通过请求头中的字段构造的,源代码如下图所示:其中X-Gorgon与当前请求的api以及请求时间,请求的cookies和token等有关,经过不懈的努力(有点点夸张),我终于实现了对应的生成算法,现在做成接口免费提供给大家(下一段讲接口请求)。
x-gorgon生成算法
x-gorgon生成算法
X-Gorgon 获取接口
所以我给大家提供了一个X-Gorgon的生成接口,大家可以请求,但是请大家注意频率,毕竟个人的小电脑不太耐折腾。
- 接口参数:
url = "http://8.131.59.252:8080"
headers = {
"dou-url": dou_url, # 填写对应的请求的api
"dou-cookies": dou_cookies, # 填写你的cookies
"dou-token": dou_token, # 填写你的token(没有的话,就填空置:“”)
"dou-queries": dou_queries # 填写你的请求的queries(没有的话,就填空置:“”)
}
- 接口返回值:
# 下面是请求正确的格式
{
"status":0, # 说明请求成功
"X-gorgon":"03jdfahdfdald" # 返回到额 X-Gorgon
}
# 下面是请求错误的格式
{
"status":1, # 表示生成X-Gorgon失败
"reason":"" # 说明错误的原因
}
下面是请求示例:
import json
import requests
# 这个是生成X-Gorgon的服务器(不需要改)
gorgon_host = "http://8.131.59.252:8080"
# 下面这几个都需要填上你的请求的东西
# 填写你要爬取的抖音的url
dou_url = ""
# 填写你的cookies
dou_cookies = ""
# 填写你的 token (没有的话就不动这个)
dou_token = ""
# 填写你的queries(没有的话就不动这个)
dou_queries = ""
headers = {
"dou-url": dou_url,
"dou-cookies": dou_cookies,
"dou-token": dou_token,
"dou-queries": dou_queries
}
res = requests.get(gorgon_host, headers=headers)
status_code = res.status_code
if status_code == 200:
print("请求成功")
# 解析X-Gorgon
res_gorgon = json.loads(res.text)
if res_gorgon.get("status") == 0:
print("成功获取 X-Gorgon")
print(res_gorgon.get("X-gorgon")) # 你就可以用来爬数据了
else:
print("获取 X-Gorgon 失败")
print(res_gorgon.get("reason"))
else:
print("请求发送错误/可能是你的网络错误,也可能是我的错误,但是大概率是你那边的错误")
注意
如果请求的X-gorgon不能用,可能是你的url构造的问题,也有可能是你的cookies、token的问题,请注意检查。(当然了,也有可能是我的代码的问题,但是我这边都是可以抓到数据的)
附录
如果需要,我会从头讲一下怎么抓包,怎么请求数据什么的。