Python使用pypcap扩展包,抓取视频网站的视频URL

前言

最近工作需要爬取视频URL,本人在网上找了很多资料,最终绕了很大一个弯子才搞定,写此博客供自己以后查看,或提供给有此需求的程序员来参考。我们平常在网页上看电影的时候,我们的浏览器会每过一小会加载一小段视频,这样连续起来我们就可以看到一个完整的视频。言外之意就是视频网站都会将视频分割之后再传送给客户端,所以我们通过在网卡上抓包的方法就能抓取到向视频网站发送的HTTP请求包,从数据包提取向视频网站发送的url,最后我们把每一小片段的视频url拼起来,我们就可以得到完整的视频。

第一步、安装Python(2.7.13 64位)

python的下载地址:https://www.python.org/downloads/windows/
下载msi,这样安装也方便。
python安装步骤我就不说了,是个人应该都会。

第二步、安装Python的扩展包pypcapy==1.1.2

这里本人已经试过了,最新的版本是有问题的,最好使用旧一点的版本。

  1. pip install pypcap==1.1.2 安装时会出现以下问题,会提示没有安装vc++ 9.0。
    在这里插入图片描述
  2. 微软给python2提供了vc++库,但是没有提供python3的,这也是为什么我们选择python2的原因,下载VCForPython27.msi
    下载链接:https://www.microsoft.com/en-us/download/details.aspx?id=44266
    下载完成后直接点击下一步安装就可以了。
    在这里插入图片描述
  3. VC++安装完成之后,pip install pypcap==1.1.2,这时我们会遇到一个新的错误,说找不到pcap.h,这时我们需要下载winpcap的开发包。
    Winpcap开发者版本下载地址:http://www.winpcap.org/devel.htm
    在这里插入图片描述
  4. winpcap下载完之后,接下来的两步很关键,一定仔细阅读(前两步是安装python另一个扩展包pcapy必须的过程,安装pypcap前两步可省略)。
    • 解压winpcap的开发包,把include和lib目录里面的文件放到VC的同名目录里面(我的 VCForPython27默认安装目录C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC)
    • 注意事项:如果是用的64位的python,还得把winpcap开发包中Lib目录中的x64目录里面的两个lib文件放到vc的lib目录中的amd64目录中。(将WpdPcak>Lib>x64目录中的Packet.lib与wpcap.lib文件拷贝到C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\lib\amd64目录中)
    • 找到python的安装目录然后将include放到python的include目录,然后将Lib放到python的lib目录
      在这里插入图片描述
  5. 接下来继续安装显示安装成功!如果你是下载的压缩包 python setup.py install 安装的方式,在安装成功之后,找到这个包的路径,将pypcap的包的位置添加到环境变量中。
    在这里插入图片描述
    在这里插入图片描述
  6. 安装成功之后呢,我们进入python模式试一下吧。本以为大功告成,结果还是有错误,显示找不到DLL,这时我们需要安装WinPcap,我们刚才使用了WinPcap开发包,还没有安装WinPcap工具。
    WinPcap下载地址:https://www.winpcap.org/install/
    在这里插入图片描述
  7. 安装WinPcap之后,终于结束!在此辛苦,本人因在网上找不到全的资料,百度出来的都是一些乱七八遭的,装这个装到晚上2点才睡觉。。。
    在这里插入图片描述在这里插入图片描述

第三步、安装Python的扩展包dpkt(这个没什么特别的,直接装就可以。)

在这里插入图片描述

第四步、运行以下代码,并打开浏览器观看视频。

  • 以下代码作者已试验过,只能抓取http请求,我们打开美剧鸟观看视频,美剧鸟网站都是http请求。
#encoding: utf8
import pcap
import dpkt
import re

pc=pcap.pcap()    #注,参数可为网卡名,如eth0, 设置监听过滤器 HTTP请求的TCP头为GET 或者 HTTP, pc.setfilter('tcp[20:2]=0x4745 or tcp[20:2]=0x4854')
pc.setfilter('tcp port 80')    

print u"程序开始运行"

while True:
    for ptime,pdata in pc:                                      #ptime为收到时间,pdata为收到数据
        try:
            p=dpkt.ethernet.Ethernet(pdata)                     #对抓到的以太网V2数据包(raw packet)进行解包
        except Exception, e:
            continue

        if p.data.__class__.__name__=='IP':
            if p.data.data.__class__.__name__=='TCP':           #  if p.data.data.dport==80:
                header = p.data.data.data                       #  抓到的请求头, 默认按照抓到正常的请求头来解析,如果解析报错则舍弃,继续抓包
                try:
                    headerArr = header.split('\r\n')
                    url = headerArr[0].split(' ')[1]
                    host = headerArr[1].split(' ')[1]
                    requestUrl = host + url
                    domain_regex = r'^([a-zA-Z0-9]([a-zA-Z0-9-_]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,11}[/].*'
                    result = re.search(domain_regex, requestUrl)
                    if result:
                        print requestUrl
                    # print requestUrl
                except Exception, e:
                    continue

第五步、打开浏览器开发者network,可观察到我们的程序已经抓取到视频的url

在这里插入图片描述
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值