【哔哩哔哩】 Python爬虫下载bilibili视频 - Go语言中文社区

【哔哩哔哩】 Python爬虫下载bilibili视频


此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。

前言

近日,有小伙伴说想看一篇关于视频下载的文章,这不,拿bilibili来开刀了。
由于没有深入的对bilibili进行研究,导致文章可读性比较差,不喜勿喷。
虽是浅尝辄止。但是下载视频的目的可以达到。

关于清视频晰度:

方法 描述
未登录状态 抓取的视音频url参数:mid=0
登录状态 抓取的视音频url参数:mid=xxx(一串数字)

如果是未登录状态,那就没有什么清晰度可言。
若你登录状态下打开一个视频,选择高清,那么!!用你这串mid去请求的视频都是高清(视频本身没有高清除外)。

1. 思路

在这里说下整体思路!

  1. 找到视音频的url是关键
  2. 分别下载视音频后,再进行视音频混流(即画面和声音合成一个文件)。

话不多说,下面开始!!!

2. 分析

文章以下图中的视频为例。文中为Firefox浏览器,方便展示抓包效果。在这里插入图片描述
首先就是打开开发者工具抓包啦。如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看到抓包页面的媒体分类,都是mp4格式的数据包,数据包的大小从107字节到2.30MB不等。有一个很有趣的规律如下:

  1. 107字节的数据包都是通过OPTIONS的方式请求。
  2. 大一些的数据包都是通过GET方式请求。
  3. 有两个重复多次的URL(猜测是视音频)
  4. 请求头的Range字段,下一个文件会接上上一个文件的字节尾数,1文件是0-973,2文件是974-1653。。。

既然如此,下面用代码来请求一下看看。
在这里插入图片描述
执行代码后,生成了一个1kbtest.mp4文件,很显然,打开时候报错了
在这里插入图片描述
为什么会报错呢??我觉得是文件太小了,修改请求头的Range值为0-1024000,再次运行代码。
这次生成了一个1001kbmp4文件,且可以播放!!但是视频没有声音,证实 了bilibili的视频文件是视音频分离的。
在这里插入图片描述

上面有说到,抓到的数据包大部分是两个重复的URL,现在请求另一个URL看看。

代码只是将URL做了修改,请求头没有变化。
在这里插入图片描述
(图中看不出是音频,但是是有声音的),这样,就完成本次抓包工作了。
在这里插入图片描述


到了这里,抓包工作已经完成,视音频的由来也清楚了,那问题来了,这么长的一串URL是从哪里来的呢?
!!! 看源码。
百思不得其解,却忘记了最简单的方法,查看网页源码(花费了好一会儿时间才发现,原来源码里面就有!!!)

video的URL:
在这里插入图片描述
audio的URL:
在这里插入图片描述
到了这里,剩下的用正则匹配源码里面的video和audio的URL都不是问题了吧!!!


剩余问题:

ps:这里用了其他视频做示例。
1.下载好的视音频:
在这里插入图片描述
2.打开格式工厂:
在这里插入图片描述
3.视音频混流:
在这里插入图片描述
最后,静静等待混流完成即可。
以上代码,在这里下载。
代码自取: https://github.com/SunriseCai/spiderCode

3. 后面的话

小伙伴们如果感兴趣的话,可以完善代码。几个建议如下:

  1. 增加可以手动输入搜索视频的功能
  2. 视音频混流在代码内部完成,不借助外部工具
  3. 利用Pyqt5做成可视化的bilibili视频下载小工具

小伙伴们若是完善后代码记得发我一份哦!!!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45081575/article/details/104334749
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢