本文是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署理呢?(假如不能,上面这个地点我是如何得到的呢?)
(注:我未继承深入测试,不要受我思想的约束)
七、总结
上帝关上了一扇门,却打开了一扇窗。
在新的年月,需要新的技能,更需要新的思路。