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

相关文章:
抖音 x-gorgon 03 免费生成接口 抖音6.3.0版本

抖音爬虫从0到1-第一弹:环境配置

抖音爬虫从0到1-第二弹:获取抖音用户数据


前言

前面介绍了分析了抖音请求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

我们知道了请求的api以及请求头里面都包含了哪些信息,我们就可以通过手动构造对应的请求参数来爬取用户的数据了。我已经在前面的文章获取到了1W+ 的用户的uid以及sec_user_id的数据了,然后我们就可以通过这些数据来爬取用户的详细数据。

2.2. 响应信息分析

响应数据0
响应数据1
响应数据2
响应数据3

二、获取用户数据

1.构造请求api

在文章抖音爬虫从0到1-第二弹:获取抖音用户数据 我们已经介绍了爬取抖音关注列表的api及其构造方法,其实获取用户详细信息和获取用户的关注列表的api基本一致,主要都是需要我们自行填充用户的user_id以及用户的sec_user_id还有一大堆的时间戳信息,其他的信息都是不变的。下面我们构造获取用户详细信息的api

对应的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=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.构造请求头

上文我们已经分析了请求头,请求头的构造也比较方便,大部分内容都是固定的,需要我们填充的主要还是几个时间戳以及对应的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=345*****5O
# 用户的user_id
uid=103600*****654544
# 用户的 sec_user_id
sec_uid=MS4wLjABAAAA2******************dWepfg9nUc5wQy0
# 头像地址
avatar_uri=26e88000************cddd496
# 用户的昵称
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)

三、总结

以上就是爬取用户信息的全部内容,码字不易,还请点赞关注,有任何问题请留言.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容