抖音爬虫从0到1-第三弹:爬取抖音用户详细数据

5716 / 2026-01-27 04:10:22 战力提升

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

如果文章对你有用并且恰好您也手头富裕,可以考虑捐赠一毛钱,我可以升级服务器。