获取网页中的视频下载地址(利用proxy_server)

昨天想着在网上下载一个稍微小一点的MP4的视频文件,但是在网上找了半天没找着,现在很多视频网站上的视频都是仅支持在线播放,不提供下载链接的。网上也有一些工具来实现这样的功能,不过我现在没有找到一个好用的。

思路

我在打开一个MV的时候,我想着去找视频的地址,于是打开了FireFox的Firebug,然后看了一下,发现有一个请求耗时特别长,大小特别大,仔细一看,就是一个mp4文件,当然这个并不是我们所需要的视频,这个只是一个广告,等这个广告播完才会有我们所想要的视频。

Figure1

Figure2

广告完了之后网页就会发出一个新的Get请求,如下图
Figure3
我们得到这个地址之后,在浏览器输入这个地址,点击确认,会得到下图一个下载确认保存的对话框,这个内容就是我们的视频了。
Figure4

仍然存在的问题

因为现在很多视频网站都会对视频进行分割,然后再进行传输,所以我们很难一次就能获得整个视频。

Figure5
上图的3个分别为4.8M,4.7M, 4.2M的GET请求的地址分别为

http://118.228.16.129/youku/67772D78CD74283B7CBF2C6864/0300021002568424716BBD05CF07DDA143076B-9FD8-FB88-D356-425002CB5AD5.flv?nk=58899470594_24473544133&ns=10028160_25014080&special=true

http://118.228.16.127/youku/6775621AA923983340263A6425/0300021000568424716BBD05CF07DDA143076B-9FD8-FB88-D356-425002CB5AD5.flv?nk=411124336987_24473541371&ns=14926680_24975560&special=true

http://118.228.16.130/youku/677647C9C793182BEDD8316058/0300021001568424716BBD05CF07DDA143076B-9FD8-FB88-D356-425002CB5AD5.flv?nk=85562168554_24473541640&ns=13330170_24443390&special=true

上面的网址是不同的。然而每一个地址的加载都会等到前一个视频播放到快完的时候才会加载。这个问题我仍然找不到解决的方法。

编程截取视频URL

有了思路,我们就可以开始编程了,为了截取加载网页的时候发出的HTTP请求,我想到两种方法:

  1. 通过代理服务器
  2. 通过网卡抓包

这里我先通过代理服务器来截获HTTP请求。
我是参照这个网页的介绍搭的proxy_server。How to Make a Proxy Server in Python 这篇文章讲得挺清楚的,可惜的就是里面有点小错误,稍微改一下就可以正常运行了。proxy_server的代码我放在我的github上.

运行

运行proxy_server.py, 将浏览器的代理设置为proxy_server.py监听的地址和端口. 得到下面的结果。
我这里用的是网易公开课的视频作为例子,因为网易公开课的视频没有将它分为很多段然后再进行传输。

Figure5

Figure5

尚未解决的问题

  1. 对于优酷这种将视频分段的网站无法获取完整的视频。
  2. 代理服务器转发速度很慢。

因为代理服务器转发的方式很慢,所以接下来我打算用网卡抓包的方法再实现一次。我这个代理服务器非常的简单,连截获回应报头的功能都没有,通过分析请求抱头和回应报头,我觉得可能会有一些发现,这也是我接下来要做的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值