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

相关文章:
抖音 x-gorgon 03 免费生成接口 抖音6.3.0版本
抖音爬虫从0到1-第一弹:环境配置


前言

因为最终目的是要抓取抖音视频数据,而通过抓包发现请求抖音的视频数据都需要对应用户的sec_id,这个加密的id的生成过程我们是不知道的,但是我们可以从抖音用户的数据包中看到对应的sec_id,而且这个加密的id不会变的,所以我可以先爬取用户的数据,但通过用户的关注列表以及粉丝列表获取其他用户的sec_id,知道了用户的数据,我们就可以爬取用户的视频数据了。
这一篇文章我将介绍抖音用户数据爬取。 如果实践过程中有任何问题,请留言。


一、分析用户请求包

如果你已经配置好环境(手机上安装好了抖音app并且抓包软件等也都配置好了),就可以开心食用下文,否则请查看环境配置然后再继续本文。

1. 分析用户数据

打开抖音,进入抖音发布者个人页面:(点击右方发布者头像进入发布者个人页面)


点击右方发布者头像进入发布者个人页面

这个时候我们查看fiddle抓到的包,我们发现对应的数据的请求地址都是包含“aweme”样式的url,fiddle右上角就是我们的请求数据,右下角就是对应的响应数据:

用户数据信息

因为我的爬取思路是根据用户的关注列表爬取关注列表的关注列表,所以我不太关注用户本身的数据,我更感兴趣的是用户的关注列表数据以及粉丝数据,那怎么看用户的关注列表呢?

查看用户观看列表

这样我们就可以看到用户的关注列表了,那么对应的抓包软件抓到的包是什么呢:

关注和追随

从图中我们可以看到follower就是用户的粉丝数据,following就是用户关注的用户。对应的请求头和响应数据如下图所示:

粉丝数据

1.1. 请求头分析

我们首先分析请求数据:


请求数据

请求数据包括对应的url(也就是api),对应的header数据,其中headers里面有Host、Connection、CookieAccept-EncodingX-SS-QUERIESX-SS-REQ-TICKETX-Tt-Token、sdk-version、User-AgentX-KhronosX-Gorgon、X-Pods

  • 我们首先介绍对应的url
    api = "https://api.amemv.com/aweme/v1/user/follower/list/?" \ # url
          "user_id={}" \   # user_id 可以在用户关注列表中搞到
          "&max_time={}" \ # 当前时间戳
          "&count=20&offset=0&source_type=1&address_book_access=2&gps_access=2" \ # 不重要
          "&ts={}" \ # 当前时间戳
          "&js_sdk_version=1.16.3.5&app_type=normal&manifest_version_code=630" \ # 不重要
          "&_rticket={}" \ # 当前时间戳
          "&ac=wifi&device_id=47012xxx7444&iid=184681xxx7740845" \ # 不重要
          "&os_version=8.0.0&channel=wandoujia_aweme1&version_code=630" \ # 不重要
          "&device_type=HUAWEI%20NXT-AL10&language=zh&resolution=1080*1812&openudid=b202a2xxx8c1538a" \ # 不重要
          "&update_version_code=6302&app_name=aweme&version_name=6.3.0&os_api=26&device_brand=HUAWEI&ssmix=a" \ # 不重要
          "&device_platform=android&dpi=480&aid=1128" \ # 不重要
          "&sec_user_id={}"\  # 加密的uid 可以在用户关注列表中搞到
          ".format(user_id, max_time, ts, _rticket, sec_user_id)

根据上面的api,我们发现大部分的数据我们是可以构造的,只有user_id以及加密的sec_user_id我们无法自己构造,但是我们可以通过用户的关注列表中获取到它关注的所有的用户的user_id和sec_user_id,所以我们只需要知道一个用户的user_id和sec_user_id,我们就可以获取和他关联的用户以及和他关联的用户的用户的user_id和sec_user_id。

  • 下面我们分析对应的请求头:
Host: api.amemv.com # 对应的host 不变
Connection: keep-alive # 不变,不重要
Cookie: "cookies"  # 重要,不变,你自己的cookie,可以在fiddle中看到
Accept-Encoding: gzip # 不变
X-SS-REQ-TICKET: 1606999477776 # 当前的时间戳,我们可以自己构造
X-Tt-Token:  003ea17385e4...23bbe199e41467-1.0.0 # 你自己的token,重要,不变,可以在fiddle中看到
sdk-version: 1 # 不变
User-Agent: com.ss.a....0.2991.0) # 重要,你自己的ua,可以在fiddle中看到
X-Khronos: 1606999477 # 当前时间戳
X-Gorgon: 03006cc00000d7464322a76ab998c12eef987b81af552788dabd # 重要,我后面会讲怎么获取
X-Pods: # 不重要,可以不要它

通过分析请求头,我们发现大部分数据是不变的,而且我们都可以通过Fiddle获得,唯一不能获得的或者说会发生改变的是:X-Gorgon,通过反编译抖音APK,我们发现它是根据请求的url和cookies和token等生成的,我已经实现了对应的生成算法并且开放了一个X-Gorgon生成接口,大家可以免费获取,但是注意请求格式:具体请参考文章:抖音 x-gorgon 03 免费生成接口

这里贴一下对应的请求X-Gorgon的代码:
假设我们已经知道了我们自己的cookies和token以及我们请求的url那么我们可以获取到对应的X-Gorgon:

# 获取当前时间戳:
ts = str(time.time()).split(".")[0]
_rticket = str(time.time() * 1000).split(".")[0]
max_time = ts
user_id = "96244072243"
sec_user_id = "MS4wLjABAAAAtk0pVzYt82o_R5jUjN4FEpRlautyPFGSgioxrH-jfvg"

# 下面填写你自己的cookies和token
cookies = "你自己的cookies"
token = "你自己的token" 

# 构造请求的url
url= "https://api.amemv.com/aweme/v1/user/follower/list/?" \
          "user_id={}" \
          "&max_time={}" \
          "&count=20&offset=0&source_type=1&address_book_access=2&gps_access=2" \
          "&ts={}" \
          "&js_sdk_version=1.16.3.5&app_type=normal&manifest_version_code=630" \
          "&_rticket={}" \
          "&ac=wifi&device_id=47012747444&iid=1846815477740845" \
          "&os_version=8.0.0&channel=wandoujia_aweme1&version_code=630" \
          "&device_type=HUAWEI%20NXT-AL10&language=zh&resolution=1080*1812&openudid=b202a24eb8c1538a" \
          "&update_version_code=6302&app_name=aweme&version_name=6.3.0&os_api=26&device_brand=HUAWEI&ssmix=a" \
          "&device_platform=android&dpi=480&aid=1128" \
          "&sec_user_id={}".format(user_id, max_time, ts, _rticket, sec_user_id)
# 发起请求获取X-Gorgon
headers = {
        "dou-url": url,  # 填写对应的请求的api
        "dou-cookies": cookies,  # 填写你的cookies
        "dou-token": token,  # 填写你的token (没有的话,就填空置:“”)
        "dou-queries": ""  # 填写你的请求的queries(没有的话,就填空置:“”)
    }
    res = requests.get("http://8.131.59.252:8080", headers=headers)
    if res.status_code==200:
        res_gorgon = json.loads(res.text)
        if res_gorgon.get("status") == 0:
            gorgon = res_gorgon.get("X-gorgon")
        else:
            print("param error when get gorgon")
            return
    else:
        print("request error when get gorgon")
        return
    print("gorgon: " + gorgon)  # 这就是你的gorgon了

  • 通过获取的X-Gorgon发起请求获取响应数据,即用户的关注列表:
# 重新构造请求头:
headers = {
        "Host": "api.amemv.com",
        "Connection": "keep-alive",
        "Cookie": cookies, # 你自己的Cookies
        "Accept-Encoding": "gzip",
        "X-SS-REQ-TICKET": _rticket, # 当前时间戳,上面的代码片已经生成了
        "X-Tt-Token": "0095a45e5cc.....c42c97e37d7350",  # 你自己的token
        "sdk-version": "1",
        "User-Agent": "你自己的user-agent", 
        "X-Khronos": ts, # 当前时间戳,上面的代码片已经生成了
        "X-Gorgon": gorgon # X-gorgon,上面的代码片已经生成了
    }

# 发起请求
result = doGetGzip(url, headers) # 这是我自己写的函数,在下面的代码片中
print(result)

  • doGetGzip 函数
def doGetGzip(url, headers):

    req = request.Request(url)

    for key in headers:
        req.add_header(key, headers[key])
    with request.urlopen(req) as f:
        data = f.read()
        return gzip.decompress(data).decode()

2. 分析响应数据获取用户数据

2.1. 响应数据格式:

响应的数据的格式是json的,所以一般我们都将响应的数据转换成json进行处理,通过fiddle抓包我们可以看到响应数据主要包括下面几个部分,而关注的用户的信息都在“followers”里面。其他的字段主要用于翻页,因为一次请求只返回20条数据,响应数据的其他字段:has_more 表示的是是不是有更的数据,max_time就是下一页数据的游标,我们主要关注follower里的数据。


响应数据概览

下面我们可以看到followers里面有20条数据,每一条数据里面就是一个用户的信息


每一次请求返回的粉丝数据

下面就是具体的每一个用户的字段:


用户字段

用户字段有很多,大多数对我来说都没有用,我只关注user_id 和 对应的 sec_uid,当然如果可以看自己的需求获取更多的数据,从上图我们发现我们可以获取到,因此我的目的就达到了,这样我就可以把它们存下来,下面再通过它俩请求这个用户关注的用户的这两个信息,下一篇文章我将主要介绍一下如何爬取视频信息。

爬取的用户数据

以上就是获取抖音用户的全部内容了,后面我会具体讲解怎么抓取视频数据等,码字不易,还请点赞关注,有任何问题请留言。

last but not least

任何问题,或者想要获取对应的抖音APK抓包软件或者相关代码,可以留言,我会及时倾尽所有问您解答

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

推荐阅读更多精彩内容