抖音爬虫教程,从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=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={}"\  # 加密的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的代码:
假如咱们曾经晓得了咱们本人的cookies和token以及咱们申请的url那么咱们能够获取到对应的X-Gorgon:

# 获取以后工夫戳:ts = str(time.time()).split(".")[0]_rticket = str(time.time() * 1000).split(".")[0]max_time = tsuser_id = "96244072243"sec_user_id = "MS4wLjABAAAAtk0pVzYt82o_R5jUjN4FEpRlautyPFGSgioxrH-jfvg"# 上面填写你本人的cookies和tokencookies = "你本人的cookies"token = "你本人的token"# 结构申请的urlurl= "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-Gorgonheaders = {        "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,当然如果能够看本人的需要获取更多的数据,从上图咱们发现咱们能够获取到,因而我的目标就达到了,这样我就能够把它们存下来,上面再通过它俩申请这个用户关注的用户的这两个信息,下一篇文章我将次要介绍一下如何爬取视频信息。

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

——————————————————————————————————————————

TiToData:业余的短视频、直播数据接口服务平台。
更多信息请分割: TiToData

笼罩支流平台:抖音,快手,小红书,TikTok,YouTube