分享

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

 山峰云绕 2018-03-14

【【python学院】学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以】http://toutiao.com/group/6532779150652998151/?iid=15906422033&app=explore_article&timestamp=1521041217&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share


一、前言

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

二、手动下载视频

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

看到用的是video标签播放视频的,直接拿到他的src属性值就是视频的链接了,在用一个新窗口打开即可:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

三、分析视频链接构造过程

好了到这里我们发现这么几步就可以把视频弄到微信中了,但是这么看来是不是有点费劲,而且还需要手动,完全不符合一个程序猿的做事风格,所以咋们得写程序实现自动化。我们为了方便现在PC端上写脚本实现自动化下载这个视频,原理也很简单,用Python脚本进行网页爬虫,得到视频原链接即可,关于爬虫知识点不多介绍了,网上多的很,而用Python来爬非常方便的,不到100行代码即可。爬虫原理很简单:使用api获取整个页面内容,然后用正则表达式得到你想要的标签内容或者纯文本内容即可。下面就来看一下Python脚本中获取页面内容的代码:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

执行完这个脚本之后,查看video.html内容,直接查找player那个div标签内容:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

可惜的是,并没有发现player标签下面有video标签内容,所以这里就猜想这段html内容使用js动态生成的,所以我们继续查看这个页面请求的js文件内容,直接通过浏览器中F12键弄出来的元素页面查看这个页面的所有:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这里有好几个js,通过分析发现是这个tt-video.js最可疑,我们把他的内容拷贝到WebStorm中,然后Ctrl Alt L格式化操作一下,这个WebStorm是前端开发的软件,可以自行装一个即可:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这块的代码大致的意思是:有一个remoteURL 视频id字符串,然后用crc32函数处理,得到一个链接,然后用jsonp访问这个链接得到一个json数据,然后解析这个json数据,data节点中的video_list节点中的main_url这个key值,在用base64进行解码得到视频的原始链接。那么这里的remoteURL上面已经有了:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这里代码格式化不是很标准,但是如果有js基础,还是可以大致看懂的,逻辑大致如下:通过外部传入的字符串内容(remoteURL 视频id),然后获取这个url的path字符串内容在凭借一个字段r,这个字段值是个随机数值,然后在用crc32算法计算(看到那个n(o)这个函数调用得到的是i值,而且还需要做移位操作的),然后在将这个i值也就是crc32校验值用s字段值拼接即是最后的链接,这里为了更好的验证,我们先用charles来进行抓包看看这个结果:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

3、访问这个链接得到一个json数据,需要解析video_list数组中的main_url值,然后用base64解码得到最终的原始视频链接。

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

第二步:获取视频id

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

在第一步的基础上解析页面内容,用正则表达式获取视频id值:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

第三步:拼接url计算crc32值

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这里注意获取随机值是用的random.random()方法,这个获取到的是0-1之间的小数,所以需要转化成字符串,然后去除小数点,也就是从字符串的下标2开始截取内容。这个需要看之前分析js中的那个随机数获取逻辑:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这个就是js代码实现的随机逻辑。Math.random()是获取0-1之间的小数,然后转化成10进制的字符串内容,在进行截取内容即可。得到随机数之后开始拼接,同时拼接videoid值。然后在计算crc32值,这里需要注意的是,用python自带的binascii.crc32算法之后还得移位,这个也是分析js代码得到的结果:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这个就是js代码进行移位的逻辑。这里python脚本保持一致即可。

第四步:解析json获取视频url

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这里主要是简单的解析json数据即可:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

第五步:解码视频url

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

直接使用base64进行解码即可

第六步:下载视频

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

下载文件就比较简单了:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

保存到本地mp4文件,文件名是个随机数值。这里没有详细处理了,应该解析上面那个json数据得到视频的详细信息,比如类型,然后在这里在规定保存文件的类型。

下面不多解释了,直接跑python脚本看看效果:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

看到打印的值了,视频url获取成功了,看看本地保存的视频文件:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这样就成功了,不多解释了。程序猿干事就是这么任性,不做重复工作,以后有了这个脚本工具再也不用那么费劲了。而且后续感兴趣的同学可以改造一下这个脚本,实现爬取今日头条整个视频tab页面的所有视频。这里不再折腾了,主要还是人家那个重要的视频url值获取过程。其他没难度哈!

注意:在操作的过程中可能会遇到这样的错误:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

这个是没有找到对应的videoid视频id值,这时候可以选择再次运行脚本,或者把需要爬取数据的链接放到浏览器中进行浏览查看数据是否正确。

六、移动端下载器

前面介绍了如何使用python脚本爬取视频,但是我们现在大部分都是用移动端的app看今日头条视频,如果这时候要是有一个辅助工具那就最好了,所以我就弄了一个Android版本的辅助下载工具,用法非常简单,安装小工具之后,打开今日头条视频页面,点击分享,选择转发链接,选择[今日头条下载器]即可:

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

看到了,这样就非常轻松的将今日头条视频保存到本地了。

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

学会Python之后,不仅能批量下载小电影!连今日头条的视频都可以

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多