纳速健身
标题: 【Fidder网络抓包+Python爬虫】下载微信小程序视频 [打印本页]
作者: awagink 时间: 2022-3-22 00:11
标题: 【Fidder网络抓包+Python爬虫】下载微信小程序视频
文章目录
1. Fidder抓包
1.1 在电脑上打开微信小程序视频播放页以及Fidder软件
1.2 点击视频播放按钮,并查看Fidder抓到的数据包
2. Python爬虫
2.1 视频下载
2.2 视频合并
2.3 完整代码
3. 写在最后
1. Fidder抓包
关于fidder软件的安装和配置,这里我就不多赘述了,大家上网都很容易搜到。
1.1 在电脑上打开微信小程序视频播放页以及Fidder软件
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文件列表中。
通过网络抓包工具,我们可以获取视频网站的请求头数据,以及视频存储网址:
项目 内容
请求头 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/WIFIMiniProgramEnv/Windows WindowsWechat’, ‘Host’:‘videodest-cdn.xiaodaka.net’}
各视频存储网址 ‘http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-’+视频编号+".ts"
2. Python爬虫
2.1 视频下载
首先使用爬虫测试该视频共被分为多少节,以及各个页面的相应情况(200表示成功响应,423表示响应失败),随后保存诸多片段视频。
- <p class="MsoNormal"><span lang="EN-US">import requests<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">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'}<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">for i in range(1000000):<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- if (i+1)<10:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- k='0'+str(i+1)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- else:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- k=str(i+1)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- link='http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-000'+k+'.ts'<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- path="C:\\Users\\123\\Desktop\\vedio\"+k+'.ts'<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- r=requests.get(link,headers=headers,timeout=20)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- if r.status_code!=200:# 200</span><span style="font-family:宋体;
- mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
- 宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;
- mso-hansi-theme-font:minor-latin">表示网站成功响应</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- break<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- print(link)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- print(str(i+1),"</span><span style="font-family:宋体;mso-ascii-font-family:
- Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">页面响应码:</span><span lang="EN-US">",r.status_code)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- ###########################################</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">保存视频</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- with open(path,"wb") as f:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- f.write(r.content)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- f.close()</span></p>
复制代码
2.2 视频合并
- <p class="MsoNormal"><span lang="EN-US">import os<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">def MergeTs(download_path,hebing_path):<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- all_ts = os.listdir(download_path)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- with open(hebing_path, 'wb+') as f:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- for i in range(len(all_ts)):<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- ts_video_path = os.path.join(download_path, all_ts[i])<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- f.write(open(ts_video_path, 'rb').read())<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- print("</span><span style="font-family:宋体;mso-ascii-font-family:
- Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">合并完成!!</span><span lang="EN-US">")</span></p>
复制代码
2.3 完整代码
- <p class="MsoNormal"><span lang="EN-US">import os<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">import requests<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">def MergeTs(download_path,hebing_path):# </span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">视频合并</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- all_ts = os.listdir(download_path)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- with open(hebing_path, 'wb+') as f:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- for i in range(len(all_ts)):<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- ts_video_path = os.path.join(download_path, all_ts[i])<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- f.write(open(ts_video_path, 'rb').read())<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- print("</span><span style="font-family:宋体;mso-ascii-font-family:
- Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">合并完成!!</span><span lang="EN-US">")<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">#############################################<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">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'}<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">for i in range(1000000):<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- if (i+1)<10:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- k='0'+str(i+1)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- else:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US"> k=str(i+1)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- link='http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-000'+k+'.ts'<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- path="C:\\Users\\123\\Desktop\\vedio\"+k+'.ts'<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- r=requests.get(link,headers=headers,timeout=20)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- if r.status_code!=200:# 200</span><span style="font-family:宋体;
- mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
- 宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;
- mso-hansi-theme-font:minor-latin">表示网站成功响应</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- break<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- print(link)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- print(str(i+1),"</span><span style="font-family:宋体;mso-ascii-font-family:
- Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">页面响应码:</span><span lang="EN-US">",r.status_code)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- ###########################################</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">保存视频</span><span lang="EN-US"><o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- with open(path,"wb") as f:<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- f.write(r.content)<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">
- f.close()<o:p></o:p></span></p>
- <p class="MsoNormal"><span lang="EN-US">MergeTs("C:\\Users\\123\\Desktop\\vedio",
- "C:\\Users\\123\\Desktop\\first.mp4")</span></p>
复制代码
3. 写在最后
如果视频不是很长的话建议录屏,毕竟录屏多简单…
反之则可以尝试本文方法下载视频。
创作不易,点个赞吧(*^_^*)
————————————————
版权声明:本文为CSDN博主「ccql」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43510916/article/details/113962009
欢迎光临 纳速健身 (https://nasue.com/) |
Powered by Discuz! X3.4 |