我是怎样完成一个音悦台下载程序的?

本文是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代理呢?(如果不能,上面这个地址我是如何获得的呢?)

(注:我未继续深入测试,不要受我思想的约束)

七、总结

上帝关上了一扇门,却打开了一扇窗。

在新的年代,需要新的技术,更需要新的思路。


上一篇:警惕python中的*重复符(运算符)
下一篇:Python 中的引用和类属性的理解

PythonTab微信公众号:

Python技术交流互助群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854