抓取网页视频(根据上篇文章的思路,我用了*敏*感*词*网卡流量的方式来改进了我的程序)
优采云 发布时间: 2021-12-27 10:08抓取网页视频(根据上篇文章的思路,我用了*敏*感*词*网卡流量的方式来改进了我的程序)
按照上一篇的思路,我用监控网卡流量的方法来改进我的程序。速度有了很大的提高。
想法
下图是我用wireshark做的一个实验。在请求路径中留下带有.mp4、.flv的请求,你得到的就是请求的视频资源。
用wireshark试验了一下,确定这种抓包的方法可行,就开始用python写抓包代码。
我使用python的pcap和dpkt包来分析网卡流量。首先是使用pcap监控我的网卡,设置pcap过滤器只处理HTTP请求,因为视频地址在HTTP请求中。我在HTTP请求的地址中找到了收录
.flv的请求,然后就可以得到视频的url地址了。
实验
代码比较短,我直接贴上代码。关于pcap和dpkt的使用我参考了这篇文章,但是这篇文章应该是抄袭别人的。当我搜索它时,我找到了一个更好的,但是当我写这篇文章时,我找不到更好的。,只能发这个不太好。
当然代码也会放到我的Github上,哈哈~
#encoding: utf8
import pcap
import dpkt
pc=pcap.pcap('eth1') #注,参数可为网卡名,如eth0
#设置*敏*感*词*过滤器 HTTP请求的TCP头为GET 或者 HTTP
pc.setfilter('tcp[20:2]=0x4745 or tcp[20:2]=0x4854')
print "starting capture"
for ptime,pdata in pc: #ptime为收到时间,pdata为收到数据
#对抓到的以太网V2数据包(raw packet)进行解包
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
# ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
if p.data.data.__class__.__name__=='TCP':
if p.data.data.dport==80:
header = p.data.data.data # by gashero
headerArr = header.split('\r\n')
url = headerArr[0].split(' ')[1]
host = headerArr[1].split(' ')[1]
requestUrl = host + url
if requestUrl.find('.flv') != -1:
# print headerArr
print requestUrl
运行结果图:
未解决的问题是优酷等对视频进行分片的网站无法获取完整的视频。