首页 > Python基础教程 >
-
我是怎样完成一个音悦台下载程序的?
本文是pythontab技术群① 网友 “贵阳-Win 7” (微博)投递的文章
一、序
前段时间发现一个可以下载音悦台视频的程序,应该是E语言写的,本着想逆向一下,然后用python重新写一个,奈何汇编基本忘完了,才搞了一会就搞不下去了。
就这么放弃么?肯定不是,我又想了一个思路,既然它要解析一个网址,那么我就试试抓包分析,所以就有了这篇文章。
二、上wireshark
wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。
首先我打开wireshark,设置抓包规则,抓HTTP包,内容应该会包含yinyuetai这样的字符串。
规则就变成了:
http contains yinyuetai
Wireshark 开始工作后,我启动了这个音悦台解析软件,找到一个视频播放地址
http://v.yinyuetai.com/video/40
然后点击单页解析,wireshark马上就捕获到了数据,我们进一步分析
在捕获的数据中,我发现了一个GET请求,点击右键,然后Follow TCP stream
到目前为止,我们获得的信息是,这个程序发送了一个GET请求,请求的路径是
/insite/get-video-info?flex=true&videoId=40
请求的主机是
www.yinyuetai.com
请求的数据中,videoId后面的40是我们视频播放地址的最后一个值。
我在浏览器中尝试访问这个完整的URL,它给我返回了一个文件,我尝试用notepad++之类的软件观察了,发现其中有很多信息。
那么,我该怎么继续呢?
三、上python
这个视频解析程序,在我点击解析后,出现了下面类似的字样,其中包含了下载链接
http://flv.yinyuetai.com/uploads/vid...
那么,在上面返回的这个文件中有没有类似的字符串呢?我通过ctrl+F进行了一下查找,果然有。
下面是我用python进行测试时候的截图。
我们可以在返回的html代码中找到对应的字样,如果我们再能使用正则表达式匹配一下,那就完美了。
四、上正则
通过多次测试,发现下载地址的规律如下:
http://[一些字母].yinyuetai.com/uploads/videos/common/[一些内容]&br[一些内容]
最终正则表达式为
re.findall("http://\w*?\.yinyuetai\.com/uploads/videos/common/.*?(?=&br)",html)
我这里解释一下,
1.首先查找http://
2.然后使用懒惰模式匹配字母
3.然后匹配对应的.yinyuetai.com/uploads/videos/common/
4.然后使用懒惰模式匹配一些内容
5.最后捕获&br
五、多次调试
写完一个程序是多么令我们高兴,除了程序按照我们的要求工作,我们在其中更是收获良多,是不是?
但,一切尚未结束。
是的,完全没有,要写好一个程序哪有这么简单?
会不会有异常?会不会timeout,音悦台会不会判断UserAgent?
如何使用多线程下载多个视频?
会不会有假冒伪劣视频冒充?(我肿么会告诉你其中有一个0.6+MB的假冒伪劣视频)
但,那已经是你需要考虑的问题了。
六、新的挑战
今天在互联网闲逛的时候发现一个好东西,叫做youtube-dl(不知道的自己google)
它可以下载youtube的视频,而且是python写的,但是我下载来看,却加密了,你能通过抓包再写一个么?
Tip 1:
https://www.youtube.com/get_video_info?&video_id=RBumgq5yVrA&el=detailpage&ps=default&eurl=&gl=US&hl=en
Tip 2:
众所周知,在国内是上不了youtube的,如果上了VPN,我们还能抓到包么?其它的http代理呢?(如果不能,上面这个地址我是如何获得的呢?)
(注:我未继续深入测试,不要受我思想的约束)
七、总结
上帝关上了一扇门,却打开了一扇窗。
在新的年代,需要新的技术,更需要新的思路。