返回顶部

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

[复制链接]
awagink 显示全部楼层 发表于 2022-3-22 00:11:04 |阅读模式 打印 上一主题 下一主题
文章目录
1. Fidder抓包
1.1 在电脑上打开微信小程序视频播放页以及Fidder软件
1.2 点击视频播放按钮,并查看Fidder抓到的数据包
2. Python爬虫
2.1 视频下载
2.2 视频合并
2.3 完整代码
3. 写在最后
1. Fidder抓包
      关于fidder软件的安装和配置,这里我就不多赘述了,大家上网都很容易搜到。
1.1 在电脑上打开微信小程序视频播放页以及Fidder软件
image.png
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文件列表中。
image.png
      通过网络抓包工具,我们可以获取视频网站的请求头数据,以及视频存储网址:
项目       内容
请求头   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表示响应失败),随后保存诸多片段视频。
  1. <p class="MsoNormal"><span lang="EN-US">import requests<o:p></o:p></span></p>

  2. <p class="MsoNormal"><span lang="EN-US">headers={'User-Agent': 'Mozilla/5.0
  3. (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
  4. Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI
  5. MiniProgramEnv/Windows WindowsWechat', 'Host':'videodest-cdn.xiaodaka.net'}<o:p></o:p></span></p>

  6. <p class="MsoNormal"><span lang="EN-US">for i in range(1000000):<o:p></o:p></span></p>

  7. <p class="MsoNormal"><span lang="EN-US">   
  8. if (i+1)<10:<o:p></o:p></span></p>

  9. <p class="MsoNormal"><span lang="EN-US">      
  10. k='0'+str(i+1)<o:p></o:p></span></p>

  11. <p class="MsoNormal"><span lang="EN-US">   
  12. else:<o:p></o:p></span></p>

  13. <p class="MsoNormal"><span lang="EN-US">      
  14. k=str(i+1)<o:p></o:p></span></p>

  15. <p class="MsoNormal"><span lang="EN-US">   
  16. link='http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-000'+k+'.ts'<o:p></o:p></span></p>

  17. <p class="MsoNormal"><span lang="EN-US">   
  18. path="C:\\Users\\123\\Desktop\\vedio\"+k+'.ts'<o:p></o:p></span></p>

  19. <p class="MsoNormal"><span lang="EN-US">   
  20. r=requests.get(link,headers=headers,timeout=20)<o:p></o:p></span></p>

  21. <p class="MsoNormal"><span lang="EN-US">   
  22. if r.status_code!=200:# 200</span><span style="font-family:宋体;
  23. mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
  24. 宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;
  25. mso-hansi-theme-font:minor-latin">表示网站成功响应</span><span lang="EN-US"><o:p></o:p></span></p>

  26. <p class="MsoNormal"><span lang="EN-US">      
  27. break<o:p></o:p></span></p>

  28. <p class="MsoNormal"><span lang="EN-US">   
  29. print(link)<o:p></o:p></span></p>

  30. <p class="MsoNormal"><span lang="EN-US">   
  31. print(str(i+1),"</span><span style="font-family:宋体;mso-ascii-font-family:
  32. Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
  33. 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>

  34. <p class="MsoNormal"><span lang="EN-US">   
  35. ###########################################</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
  36. mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
  37. Calibri;mso-hansi-theme-font:minor-latin">保存视频</span><span lang="EN-US"><o:p></o:p></span></p>

  38. <p class="MsoNormal"><span lang="EN-US">   
  39. with open(path,"wb") as f:<o:p></o:p></span></p>

  40. <p class="MsoNormal"><span lang="EN-US">      
  41. f.write(r.content)<o:p></o:p></span></p>

  42. <p class="MsoNormal"><span lang="EN-US">   
  43. f.close()</span></p>
复制代码


2.2 视频合并
  1. <p class="MsoNormal"><span lang="EN-US">import os<o:p></o:p></span></p>

  2. <p class="MsoNormal"><span lang="EN-US">def MergeTs(download_path,hebing_path):<o:p></o:p></span></p>

  3. <p class="MsoNormal"><span lang="EN-US">   
  4. all_ts = os.listdir(download_path)<o:p></o:p></span></p>

  5. <p class="MsoNormal"><span lang="EN-US">   
  6. with open(hebing_path, 'wb+') as f:<o:p></o:p></span></p>

  7. <p class="MsoNormal"><span lang="EN-US">      
  8. for i in range(len(all_ts)):<o:p></o:p></span></p>

  9. <p class="MsoNormal"><span lang="EN-US">           
  10. ts_video_path = os.path.join(download_path, all_ts[i])<o:p></o:p></span></p>

  11. <p class="MsoNormal"><span lang="EN-US">           
  12. f.write(open(ts_video_path, 'rb').read())<o:p></o:p></span></p>

  13. <p class="MsoNormal"><span lang="EN-US">   
  14. print("</span><span style="font-family:宋体;mso-ascii-font-family:
  15. Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
  16. minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">合并完成!!</span><span lang="EN-US">")</span></p>
复制代码


2.3 完整代码
  1. <p class="MsoNormal"><span lang="EN-US">import os<o:p></o:p></span></p>

  2. <p class="MsoNormal"><span lang="EN-US">import requests<o:p></o:p></span></p>

  3. <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;
  4. mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
  5. Calibri;mso-hansi-theme-font:minor-latin">视频合并</span><span lang="EN-US"><o:p></o:p></span></p>

  6. <p class="MsoNormal"><span lang="EN-US">   
  7. all_ts = os.listdir(download_path)<o:p></o:p></span></p>

  8. <p class="MsoNormal"><span lang="EN-US">   
  9. with open(hebing_path, 'wb+') as f:<o:p></o:p></span></p>

  10. <p class="MsoNormal"><span lang="EN-US">      
  11. for i in range(len(all_ts)):<o:p></o:p></span></p>

  12. <p class="MsoNormal"><span lang="EN-US">           
  13. ts_video_path = os.path.join(download_path, all_ts[i])<o:p></o:p></span></p>

  14. <p class="MsoNormal"><span lang="EN-US">           
  15. f.write(open(ts_video_path, 'rb').read())<o:p></o:p></span></p>

  16. <p class="MsoNormal"><span lang="EN-US">   
  17. print("</span><span style="font-family:宋体;mso-ascii-font-family:
  18. Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
  19. minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">合并完成!!</span><span lang="EN-US">")<o:p></o:p></span></p>

  20. <p class="MsoNormal"><span lang="EN-US">#############################################<o:p></o:p></span></p>

  21. <p class="MsoNormal"><span lang="EN-US">headers={'User-Agent': 'Mozilla/5.0
  22. (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
  23. Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI
  24. MiniProgramEnv/Windows WindowsWechat', 'Host':'videodest-cdn.xiaodaka.net'}<o:p></o:p></span></p>

  25. <p class="MsoNormal"><span lang="EN-US">for i in range(1000000):<o:p></o:p></span></p>

  26. <p class="MsoNormal"><span lang="EN-US">   
  27. if (i+1)<10:<o:p></o:p></span></p>

  28. <p class="MsoNormal"><span lang="EN-US">      
  29. k='0'+str(i+1)<o:p></o:p></span></p>

  30. <p class="MsoNormal"><span lang="EN-US">   
  31. else:<o:p></o:p></span></p>

  32. <p class="MsoNormal"><span lang="EN-US">        k=str(i+1)<o:p></o:p></span></p>

  33. <p class="MsoNormal"><span lang="EN-US">   
  34. link='http://videodest-cdn.xiaodaka.net/video/ochvq0PokL-KKdXSKI4IV1pXAdL41571990548700-000'+k+'.ts'<o:p></o:p></span></p>

  35. <p class="MsoNormal"><span lang="EN-US">   
  36. path="C:\\Users\\123\\Desktop\\vedio\"+k+'.ts'<o:p></o:p></span></p>

  37. <p class="MsoNormal"><span lang="EN-US">   
  38. r=requests.get(link,headers=headers,timeout=20)<o:p></o:p></span></p>

  39. <p class="MsoNormal"><span lang="EN-US">   
  40. if r.status_code!=200:# 200</span><span style="font-family:宋体;
  41. mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:
  42. 宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;
  43. mso-hansi-theme-font:minor-latin">表示网站成功响应</span><span lang="EN-US"><o:p></o:p></span></p>

  44. <p class="MsoNormal"><span lang="EN-US">      
  45. break<o:p></o:p></span></p>

  46. <p class="MsoNormal"><span lang="EN-US">   
  47. print(link)<o:p></o:p></span></p>

  48. <p class="MsoNormal"><span lang="EN-US">   
  49. print(str(i+1),"</span><span style="font-family:宋体;mso-ascii-font-family:
  50. Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
  51. 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>

  52. <p class="MsoNormal"><span lang="EN-US">   
  53. ###########################################</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
  54. mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
  55. Calibri;mso-hansi-theme-font:minor-latin">保存视频</span><span lang="EN-US"><o:p></o:p></span></p>

  56. <p class="MsoNormal"><span lang="EN-US">   
  57. with open(path,"wb") as f:<o:p></o:p></span></p>

  58. <p class="MsoNormal"><span lang="EN-US">      
  59. f.write(r.content)<o:p></o:p></span></p>

  60. <p class="MsoNormal"><span lang="EN-US">   
  61. f.close()<o:p></o:p></span></p>

  62. <p class="MsoNormal"><span lang="EN-US">MergeTs("C:\\Users\\123\\Desktop\\vedio",
  63. "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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ