记抖音爬虫中所遇到的坑 作者: LiesAuer 时间: 2020-01-08 分类: 开发 ## :new_moon_with_face: 常规问题 一些常规问题在此就不做记录了,比如怎么获取某加密参数、需要访问哪些接口、哪些接口无水印等等就不说了,善用搜索引擎。 ## :one: 判断接口是否成功 由于接口的原因,接口返回的`aweme_list`列表有可能是空的且`status_code`还为`0`,不能通过这两个数据判断接口是否调用成功,可使用`min_cursor`和`max_cursor`判断,当请求成功时,返回的数据必有这两个字段,必然不是`null`或者`undefined`。 ## :two: 判断是否还有更多 还是接口的问题,当请求失败时,返回的`has_more`还是为`true`,需要通过判断接口是否成功以及`has_more`共同判断,调用成功并且`has_more`为`true`才是真正的还有更多,否则稍有不慎就会出现死循环抓取。 ## :three: 视频列表请求经常性返回空 `_signature`问题,可适当使用循环重复请求,并在请求失败时重新生成`_signature`然后重试。 ## :four: 视频长度为0(某些CDN不支持设备过旧的User-Agent导致) 在抓取过程中发现有的视频抓取下来,长度为0,经排查发现有的CDN居然不认`User-Agent`,导致没有获取到视频,经过研究,拼接出一条万用移动端`User-Agent`,使用后无发现问题。这条`User-Agent`包含了较新的`iOS`以及`android`信息,~~可被所有CDN识别~~(已更新)。 ``` Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X; Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/605.1.15 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile/14G60 Safari/604.1 ``` ## :five: 长视频下载宽带不够,导致大量请求失败 当并发较高且宽带不大时会导致大量请求超时失败,一个长视频大小普遍在`50MB~100MB`左右,如果出现较频繁的超时现象,建议适当加长超时时间以及重试次数。 经过优化以上问题后,视频抓取成功率已成功达到`100%`,且运行多天稳定,无异常。 ## :arrows_counterclockwise: 更新 ### 2020-1-18 1. 万用UA更新 请将`${RANDOM_STRING}`替换成任意长度随机字符串 ``` Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X; Linux; Android 8.0; Pixel 4 Build/NOBUILD; Nexus 10 Build/N4F26I; Nexus 4 Build/NOBUILD; ${RANDOM_STRING}) AppleWebKit/605.1.15 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile/14G60 Safari/604.1 ``` ### 2020-02-01 1. 出现大量采集失败,失败的大部分是新视频,具体表现为UA正常,但视频无法正常下载,高频率重试后小概率可以下载,更换域名后有好转但仍有大量失败,建议程序加入失败数据记录,等下次断点续爬时尝试重新抓取,直到抓取成功。 2. 优化断点续爬 ### 2020-05-21 1. 修复头像可能获取不到后缀名、后缀名可能乱码的问题 ### 2020-06-07 1. 可采集挑战视频 2. 修复已删除视频抓取逻辑问题 ### 2020-07-11 1. 修复采集挑战视频失败的问题 2. 可采集原声视频 ### 2021-11-23 1. 修复采集个人视频获取UID方式改变的问题 ### 2022-02-07 1. 可采集合集视频 2. 优化图片后缀的识别 3. 列表最大抓取数量 ### 2022-02-08 1. 可采集图文视频 标签: none
大哥是不是最近注册设备不能用了
这个不太清楚哦,我不是用app接口采集的
大佬,爬取抖音视频需要用代理吗?为啥我使用代理后经常爬不动,不用代理反而可以。但是不用代理爬一段时间也不行了,怎么破?
收到。谢谢大佬的解答
我现在没有整天爬,但是爬的话,基本是每秒5-15个视频的速度,目前有几十万个视频的库存,到目前为止没发生过任何一次限爬,js算法用的是老的,还是有效的。
大佬,你一般一天爬多少个视频?可能是我一天爬取太多了?app分享接口要破解js加密算法吗。。。如果太麻烦就懒得折腾了
国内抖音不需要代理,我用的是app复制出来的分享接口,到现在还没遇到过不能采集问题。倒是有接口偶尔返回空数据的问题,我是通过重试解决的,如果一直重试都还是没有数据,就跳过采集。
我的like接口是网页的,不是APP里面的。能获取JSON的,但是每次获取出来都是没有视频内容
再次请教大神,网页端作品的url已经基本正常了,like列表的Json死活就是出不来,换了Sign也一样,有没有的破。。。
你的like接口是怎么来的,网页的还是客户端的接口?
用安卓的ua试了,出现的概率大了很多。另外,抖音V1版本时候研究过sign的函数,这次V2虽然js上有改变了一下下,貌似核心没有变,继续继续
试试这个?Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
如果还是一样频繁就不知道了
弱弱问一下大神,为什么我正常app获取链接访问,也是超大概率加载不了视频列表?
我就正常用手机操作,就是刷不出来,不知道抖音是怎么想的
如果你的链接超大概率需要访问N多次,平均20+这样子,可以尝试换个ua?我就是普通的ua也没这样的情况,就偶发性的
原因未知,目前无解,通过不断重试获取,我现在的重试次数是100,但最多的情况也就可能20-30就出来了。
App分享链接每一阵子就会变化,这个跟后面获取sign有关系么
我用app分享出来的链接,转safari访问,每次列表都加载不出来,快吐血了。刷新50次能出刷出来一次就阿弥陀佛了。我还以为是链接的原因
不受影响的,这个分享链接会跳转一次的,计算sign的参数就在跳转后的url里,这是和用户有关的,不会变动的
大佬,有项目地址吗,学习一下
抱歉,现在接口死得太快,已经不开源了,现在我代码跑了半年多了,一点毛病都没出。
想问一下您抖音话题标签的接口怎么获取啊
手机上直接分享,然后用电脑打开,网页里面就有接口哦
大佬设备 怎么解决的啊?
我不是通过手机端的接口抓取的,是通过分享链接抓取网页接口的