千家信息网

python如何爬取抖音用户详细数据

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍了python如何爬取抖音用户详细数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、分析请求用户数据的api1.
千家信息网最后更新 2025年01月31日python如何爬取抖音用户详细数据

这篇文章主要介绍了python如何爬取抖音用户详细数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、分析请求用户数据的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的构造方法比较复杂,但是要注意填入正确的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 headersdef 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_iduid=103600654544# 用户的 sec_user_idsec_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)

感谢你能够认真阅读完这篇文章,希望小编分享的"python如何爬取抖音用户详细数据"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0