爬虫进阶教程:抖音APP无水印视频批量下载

  • A+
所属分类:网络爬虫
摘要

好久没有写文章了,因为最近一直备受小论文的折磨,今天小论文初稿终于写差不多了。看着好几天都没有更新的网站有些心疼,翻了翻爬虫代码存货,决定把抖音APP视频批量下载的代码拿出来水个文章。

爬虫进阶教程:抖音APP无水印视频批量下载

一、前言

好久没有写文章了,因为最近一直备受小论文的折磨,今天小论文初稿终于写差不多了。看着好几天都没有更新的网站有些心疼,翻了翻爬虫代码存货,决定把抖音APP视频批量下载的代码拿出来水个文章

更新日志

  • 2018.5.23:github代码已经修复无法下载问题。
  • 2018.7.17:github代码已经修复参数验证问题。

二、实战背景

抖音越来越火,感觉它有毒,越刷越上瘾,总感觉下一个视频一定会更精彩,根本停不下来。想将抖音里喜欢的小哥哥/小姐姐的视频全部存到电脑硬盘里该如何操作?不想有抖音的视频水印该如何处理?

当初写完代码的截屏:

爬虫进阶教程:抖音APP无水印视频批量下载

三、实战

首先,希望你已经具备手机APP抓包分析的能力,如果不会请去自行学习:点击跳转

1、带水印视频下载

先说说带水印的视频如何抓去吧。在定好爬取目标的时候,我们应该知道自己需要那些步骤完成这项任务。比如本文中提到的任务:抖音APP固定用户的视频批量下载

思考过程:

  • 想要批量下载视频首先要获得这些视频的链接;
  • 想要获得这些视频链接可以通过用户的主页进行查看,想进用户主页,我得知道用户主页链接;
  • 用户主页链接可以通过抖音APP的搜索功能获取,那么搜索功能接口如何获取?当然是抓包看看喽!

瞧,这样思考下来,问题是不是梳理的很清楚?

搜索接口:

那么接下来就是抓包分析了,抓包过程请自行尝试。步骤是这样的:

  • 配置好Fiddler,即确定Fiddler可以对手机APP进行抓包;
  • 在手机APP搜索框中输入用户信息,点击搜索
  • 在Fiddler找到搜索接口;
  • 分析这个接口传递参数规则;
  • 写代码生成相应查询接口。

通过分析你会发现,我们通过搜索接口返回的JSON数据可以找到用户主页信息,接下里用同样的方法抓取主页用户信息再分析一波,这时候就遇到问题了,你会发现用户主页链接使用了as和cp参数进行了加密,这该如何是好?比如链接如下:

上述链接省略号部分是一些手机信息,这部分不是必须参数,可以省略。user_id是用户id可以通过上个搜索接口获取,count是用户视频数量,同样可以通过上个搜索接口获取。那最后的as和cp参数怎么办?

我没有逆向抖音APP,就是小小测试了一下,看看能不能绕过这个加密接口?抖音APP自带视频分享功能,分享链接格式如下:

中间参数都不重要,在此省略。www.douyin.com域名下存放的是分享的视频,那么这个用户主页信息是否可以通过这个域名进行访问呢?小小测试一下你会发现,完全没有问题!

这就是没有加密的接口,惊不惊喜,意不意外?根据这个用户主页接口,我们就可以轻松获取用户主页所有的视频链接了。

2、无水印视频下载

方法一:

无水印视频下载很简单,有一个通用的方法,就是使用去水印平台即可。

我使用的去水印平台是:http://douyin.iiilab.com/

在输入框中输入视频链接点击视频解析,就可以获得无水印视频链接。

这个网站当初我写代码的时候是好使的,当初用这个网站下了一些无水印视频,不过写这篇文章的时候发现这个取水印平台无法正常解析了,等它修复好了再用这个功能吧。

这个平台不仅包括抖音视频去水印,还支持火山、快手、陌陌、美拍等无水印视频。所以做一个这个网站的接口还是很合适的。

简单测试了一下,这个网站的API是需要付费解析的,如果通过模拟请求的方式有些困难,因此决定上浏览器模拟器Splinter。

Splinter是个好东西,跟Selenium使用类似,它的配置可以参考我的早期Selenium文章:http://blog.csdn.net/c406495762/article/details/72331737

Splinter有个很详细的英文文档:http://splinter.readthedocs.io/en/latest/

这里使用方法就不累述,不过有一点可以说的是,我们可以配置headless参数,来将Splinter配置为无头浏览器,啥事无头浏览器呢?就是运行Splinter不调出浏览器界面,直接在后台模拟各种请求,很是方便。

这部分的代码很简单,无非就是填充元素,确定解析按钮位置,点击按钮,获取视频下载链接即可。这点小问题,就自行分析吧。

整体代码:

方法二:

这个方法是通过网友@羽葵的反馈得知的,对下载链接直接修改即可得到无水印下载链接。

方法简单粗暴,很好用。好处就是处理速度飞快,缺点是这种方法通用性不强,不同视频发布平台的打码方法可能有不同,需要自行分析。

四、总结

玩爬虫的日子还是很有意思的,好久没有那种舒爽感了。还有,找工作也是蛮心累的事。

更多实战源码,请关注我的Github:https://github.com/Jack-Cherish/python-spider

Jack Cui

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:115   其中:访客  62   博主  53

    • avatar StrongBean 来自天朝的朋友 谷歌浏览器 Windows XP 山东省济南市 电信 0

      关于_signiture的生成问题:
      我用node fuck-XXXX.js uid 报内存溢出
      我之前用网页测试的时候也遇到这个问题,是n.Function这个字符串编码格式问题导致。
      修改从抖音下载下来的js测试成功。但是复制代码到其他文件中就不行。
      后来发现t=n.Function递归charAt的时候几个特殊字符的ascii变化以后,就跳到了别的地方,导致递归无法结束。
      在原来的js文件中修改以后,我用node fuck-XXXX.js uid 成功。
      但是还有个问题。你直接网页另存为以后,每次用__M.require(‘xxxxxe’).sign(“55984163440”)生成的sign都是相同的。
      而doump出来的每次生成的都是不一样的。

        • avatar Mr.10 来自天朝的朋友 火狐浏览器 Windows 10 广东省深圳市 电信 1

          @StrongBean 你好,能分享一下能用的签名吗?qq104758993

        • avatar jbwkz 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省苏州市 电信 0

          为啥我打开py文件一闪而过呢?

            • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 联通

              @jbwkz 在cmd中用命令行运行。

            • avatar Mr.10 来自天朝的朋友 火狐浏览器 Windows 10 广东省深圳市 电信 1

              不能用了,server_url的策略改了

                • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 联通

                  @Mr.10 嗯,还没有修复。

                • avatar Douyin 来自天朝的朋友 谷歌浏览器 Mac OS X 10_12_3 上海市浦东新区 电信 0

                  现在抖音爬虫获取用户信息是不是无效了,比如会报html[‘aweme_list’]中aweme_list不存在的错

                    • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 百度网讯科技联通节点

                      @Douyin 嗯嗯,现在那边又更新了,还没修复。

                    • avatar levent 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 联通 1

                      我用fiddler抓出来的地址是这样的:

                      http://v3-dy-x.ixigua.com/bf76d0d226a532b3b4e93df062f25c6b/5b7280f6/video/m/2206ae1e1654fd54da3981b1d14a1ead652115a17cd0000b90a86312f42/?iid=40899634289&device_id=42912637191&os_api=18&app_name=aweme&channel=App%20Store&idfa=18D69CB2-CF88-4111-A641-C1BEC49D777D&device_platform=iphone&build_number=23101&vid=FC7884FB-FE80-4B05-88AA-0EF91649E93B&openudid=2d5b75af64f1fdc2bc4fbaf49926151d6345a4db&device_type=iPhone10%2C2&app_version=2.3.1&version_code=2.3.1&os_version=11.4.1&screen_width=1242&aid=1128&ac=WIFI

                      无水印。这人的抖音号是837375133,好像地址里面也没有出现过。

                      另外,B站我也用fiddler抓手机包,但没有像抖音上的包那样,直接就是mp4的数据,根本找不到视频在哪儿。

                        • avatar Jack Cui Admin 这家伙可能用了岛国的代理 谷歌浏览器 Windows 10 日本 东京都渋谷区GMO互联网公司

                          @levent 需要先根据抖音id获得iid,应该是,id不一样。
                          B站直接返回地址,在Fiddler可以搜索看下。

                            • avatar levent 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 联通 1

                              @Jack Cui B站的mp4,可以用遨游浏览器的嗅探功能获取到地址。我把这个地址里的字段拿到fiddler里搜索,没搜索到。

                              fiddler应该会抓取所有的数据,我既然播放了视频,fiddler也应该抓到视频数据,但我在fiddler里面没有找到。

                              B站直接返回地址,应该是在哪儿呢?

                              加下你qq(见我回复时留的邮箱),我给你发下我的fiddler的截图,你方便的时候看一下,可好?

                              • avatar levent 来自天朝的朋友 谷歌浏览器 Windows 10 四川省成都市 联通 1

                                @Jack Cui 还有我前面发的那个链接,之前都能用浏览器打开,过一会就403forbidden了,什么原理实现的呢?

                                  • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 百度网讯科技联通节点

                                    @levent 那就不知道的是什么情况了,403是因为有时间验证,你过了时间就不行了。