首页 > 编程语言 >【Fidder网络抓包+Python爬虫】下载微信小程序视频

【Fidder网络抓包+Python爬虫】下载微信小程序视频

时间:2023-06-20 11:38:50浏览次数:54  
标签:视频 Fidder 微信 ts Python 537.36 Windows path


首先声明本篇博客以学习为目的,侵权即删。


文章目录

  • 1. Fidder抓包
  • 1.1 在电脑上打开微信小程序视频播放页以及Fidder软件
  • 1.2 点击视频播放按钮,并查看Fidder抓到的数据包
  • 2. Python爬虫
  • 2.1 视频下载
  • 2.2 视频合并
  • 2.3 完整代码
  • 3. 写在最后


1. Fidder抓包

       关于fidder软件的安装和配置,这里我就不多赘述了,大家上网都很容易搜到。

1.1 在电脑上打开微信小程序视频播放页以及Fidder软件

【Fidder网络抓包+Python爬虫】下载微信小程序视频_.net

1.2 点击视频播放按钮,并查看Fidder抓到的数据包

       这个时候Fidder软件界面会抓到很多数据流,如果有视频数据的话直接点保存即可,但是一般来说显示为普通响应,但是记得看来源(Process栏为Wechat),别瞅错了!
       然后双击该相应,就可以看到右侧的出现的一系列数据,但一般看Raw项就好,可以看到其视频存储网址(双击网站就可以下载这一小段视频),以及Host等一系列请求头数据。我们可以看到其网址最后下载为.ts文件,且该视频标号为00009(多看几个响应就可以发现其中的规律),这种文件格式比较讨厌,会把一个完整的视频拆分成诸多5-10s长的文件,所以后期需要用到python爬虫,以及视频合并。

m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求,是现在比较流行的一种加载方式。目前,很多新闻视频网站都是采用这种模式去加载视频。
M3U8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。原视频数据分割为很多个TS流,每个TS流的地址记录在m3u8文件列表中。

【Fidder网络抓包+Python爬虫】下载微信小程序视频_.net_02

       通过网络抓包工具,我们可以获取视频网站的请求头数据,以及视频存储网址:

项目

内容

请求头

headers={‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat’, ‘Host’:‘videodest-cdn.xiaodaka.net’}

各视频存储网址

‘http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-’+视频编号+".ts"

2. Python爬虫

2.1 视频下载

       首先使用爬虫测试该视频共被分为多少节,以及各个页面的相应情况(200表示成功响应,423表示响应失败),随后保存诸多片段视频。

import requests
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat', 'Host':'videodest-cdn.xiaodaka.net'}
for i in range(1000000):
    if (i+1)<10:
        k='0'+str(i+1)
    else:
        k=str(i+1)
    link='http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-000'+k+'.ts'
    path="C:\\Users\\123\\Desktop\\vedio\\"+k+'.ts'
    r=requests.get(link,headers=headers,timeout=20)
    if r.status_code!=200:# 200表示网站成功响应
        break
    print(link)
    print(str(i+1),"页面响应码:",r.status_code)
    ###########################################保存视频
    with open(path,"wb") as f:
        f.write(r.content)
    f.close()

2.2 视频合并

import os
def MergeTs(download_path,hebing_path):
    all_ts = os.listdir(download_path)
    with open(hebing_path, 'wb+') as f:
        for i in range(len(all_ts)):
            ts_video_path = os.path.join(download_path, all_ts[i])
            f.write(open(ts_video_path, 'rb').read())
    print("合并完成!!")

2.3 完整代码

import os
import requests
def MergeTs(download_path,hebing_path):# 视频合并
    all_ts = os.listdir(download_path)
    with open(hebing_path, 'wb+') as f:
        for i in range(len(all_ts)):
            ts_video_path = os.path.join(download_path, all_ts[i])
            f.write(open(ts_video_path, 'rb').read())
    print("合并完成!!")
#############################################
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat', 'Host':'videodest-cdn.xiaodaka.net'}
for i in range(1000000):
    if (i+1)<10:
        k='0'+str(i+1)
    else:
        k=str(i+1)
    link='http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-000'+k+'.ts'
    path="C:\\Users\\123\\Desktop\\vedio\\"+k+'.ts'
    r=requests.get(link,headers=headers,timeout=20)
    if r.status_code!=200:# 200表示网站成功响应
        break
    print(link)
    print(str(i+1),"页面响应码:",r.status_code)
    ###########################################保存视频
    with open(path,"wb") as f:
        f.write(r.content)
    f.close()
MergeTs("C:\\Users\\123\\Desktop\\vedio", "C:\\Users\\123\\Desktop\\first.mp4")

3. 写在最后

如果视频不是很长的话建议录屏,毕竟录屏多简单…
反之则可以尝试本文方法下载视频。

创作不易,点个赞吧(*^_^*)


标签:视频,Fidder,微信,ts,Python,537.36,Windows,path
From: https://blog.51cto.com/u_16165815/6521614

相关文章

  • Python中获取路径/文件的父目录
    本教程将讲解在Python中获取一个路径的父目录的各种方法。父目录是指高于或高于给定目录或文件的目录。例如,路径 C:\folder\subfolder\myfile.txt 的父目录是 C:\folder\subfolder。除了根目录外,每个目录都有一个父目录。1、使用 pathlib 模块的 path.parent() 方法获......
  • wxpython使用matplotlib.pyplot绘制GUI嵌入式统计图
    在使用wxpython编写GUI时,如果需要在GUI上显示统计图,这里就可以用到matplotlib.pyplot;一、首先就是导入matplotlib.pyplot模块frommatplotlib.backends.backend_wxaggimportFigureCanvasWxAggasFigureCanvasimportmatplotlib.pyplotasplt然后就需要一个容器,可以理......
  • uniapp企业微信web-view父子通信问题
    项目背景:开发工具为HBuilderX,框架为uniapp,开发移动端的Web应用,在企业微信中使用(自建应用),Web开发的应用,不是小程序。需求:页面中用到<web-view>组件,加载其他系统的页面(有跨域),需要在父子页面之间相互通信。这里通信的东西其实就是获取定位,通过uniapp获取用户定位信息,传递给<web-view......
  • Python中的字符串分割技巧:split方法的妙用
    Python是一种广泛使用的编程语言,提供了许多强大的字符串处理功能。其中,split方法是一项常用的技术,它可以将字符串按照指定的分隔符进行切割,使得处理文本数据变得更加简洁和高效。本文将介绍split方法的使用方法和几个实用的应用场景,帮助读者更好地掌握这一技巧。split方法的基本......
  • python爬虫学习之定制请求头
    1.在Chrome浏览器中点击右键选择“检查”命令;2.打开后选择Network;3.按下ctrl+r,在其中找到需要请求的网站,单击后选择Headers;4.得到请求头信息为:Host:www.baidu.comReferer:https://www.baidu.com/?tn=98012088_2_dg&ch=7User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)A......
  • Python学习总结之三(if语句)
    1.其实Python和C语言中的if语句是极相似的,因为if语句的职能便是判断,区别如下:(1).Python(无括号,有冒号且缩进):ifcar=='byd':print(car.upper())(2).C(有括号,无冒号且缩进无意义):if(car=="byd")printf("%s",car);2.检查是否不相等:将“==”换为"!="即可。3.比较数字......
  • 自学Python的第三天,小结一下
               作为一名计算机专业大一学生,C语言课程的学习在上半学期已然结束,一直想找个时间再开一门语言来学习,和大多数人一样因为当下python比较火也比较实用,所以就选择了这门语言。           就简单谈谈我在这两天空余时间学到的一些东西以及我的体会。首......
  • python第二次小结(章四)
    由于最近数学建模校赛即将到来,所以一直忙着磨合队内配合,因此对python的学习其实是有一点点落下了,今天抽一点时间来写这篇第四章小结。在我看来整个第四章的核心应该在for语句循环遍历。1.首先是对for语句的使用(勿忘:冒号及缩进):eg:names=['ldl','cql','xhx'] fornameinnames......
  • python字典学习(4th)
    好久没写博客了,一方面是建模校赛的开展,另一个就是随着课程的进行,难度也在不断加大,最近一直在温习功课以应对考试。话不多说,开始总结。1.字典由‘{}’包含,其中都是一些键-值对,例如:xxx={'people':'cql','age':18}2.访问值时使用xxx['people']3.添加键-值对:xxx={'people':'cql','age......
  • python序列数据拆包
    元素的序列数据都可以进行数据拆解,如下#元组data_tuple=(1,2,3)a,b,c=data_tupleprint(a)#列表data_list=[11,22,33]a2,b2,c2=data_listprint(a2)#字典data_dic={'name':'zhangsan','age':'20'}print(data_dic["name"......