Python交流学习python

Python爬取日本电影,最后10行代码啪啪被打脸

2019-05-23  本文已影响1人  慌翯

Yes!!!

好了,可以点击运行然后去喝杯咖啡,哦不,我喜欢喝茶。

一杯茶的功夫,回来之后已经下载完成。我打开文件夹check一下,发现从编号312之后的clip都是只有573字节,打开播放的话,显示的是数据损坏。

没关系,从312开始继续下载吧。然而下载得到的结果还是一样的573字节,而且下了两百多个之后出现了拒绝访问错误。

动态代理

显然我的IP被封了。之前的多个小项目,或是因为网站防护不够严格,或是因为数据条目数量较少,一直没有遇到过这种情况,这次的数据量增加,面对这种情况采取两种措施,一种是休眠策略,另一种是动态代理。现在我的IP已经被封了,所以休眠也为时已晚,必须采用动态IP了。

主要代码如下所示

合并文件

然后,我们得到了几百个9s的.ts小视频

然后,在cmd命令行下,我们进入到这些小视频所在的路径

执行

copy/b %s\*.ts %s\new.ts

很快,我们就得到了合成好的视频文件

当然这个前提是这几百个.ts文件是按顺序排列好的。

成果如下

优化—调用DOS命令 + 解析m3u8

为了尽可能的减少人的操作,让程序做更多的事

我们要把尽量多的操作写在code中

引用os模块进行文件夹切换,在程序中直接执行合并命令

并且,在判断合并完成后,使用清除几百个ts文件

这样,我们运行程序后,就真的可以去喝一杯茶,回来之后看到的就是没有任何多余的一个完整的最终视频

也就是说,要获得一个完整的视频,我们现在需要输入视频网页链接,还需要使用chrome的network解析得到真实下载地址。第二个部分显然不够友好,还有提升空间。

所以第一个尝试是,可不可以有一个工具或者一个包能嗅探到指定网页的network traffic,因为我们刚刚已经看到真实地址其实就在requestHeader中,关键在于怎样让程序自动获取。

查阅资料后,尝试了Selenium + PhantomJS的组合模拟浏览器访问,用一个叫做browsermobProxy的工具嗅探保存HAR(HTTP archive)。在这个上面花费了不少时间,但是关于browsermobProxy的资料实在是太少了,即使是在google上,搜到的也都是基于java的一些资料,面向的python的API也是很久没有更新维护了。此路不通。

在放弃之前,我又看一篇网站的源码,再次把目光投向了m3u8,上面讲到这个文件应该是包含文件真实地址的索引,索引能不能把在这上面做些文章呢?

Python不愧是万金油语言,packages多到令人发指,m3u8处理也是早就有熟肉。

pip install m3u8

这是一个比较小众的包,没有什么手册,只能自己读源码。

这个class中已经封装好了不少可以直接供使用的数据类型,回头抽时间可以写一写这个包的手册。

现在,我们可以从requests获取的源码中,首先找到m3u8的下载地址,首先下载到本地,然后用m3u8包进行解析,获取真实下载地址。

并且,解析可以得到所有地址,意味着可以省略上面的获取duration计算碎片数目的步骤。

最终

最终,我们现在终于可以,把视频网页链接丢进url中,点击运行,然后就可以去喝茶了。

再来总结一下实现这个的几个关键点:

- 网页解析

- m3u8解析

- 动态代理设置

- DOS命令行的调用

动手是最好的老师,尤其这种网站,兼具趣味性和挑战性,就是身体一天不如一天。。。

在这里我相信有很多想要学习Python的小伙伴,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的学习干货,从最基础到,各种框架都有整理,送给每一位Python小伙伴,想要获取的可以关注我的头条号并在后台私信我:学习,即可免费获取。人生苦短,我用Python!

上一篇 下一篇

猜你喜欢

热点阅读