还是自己写个 B 站视频爬虫管用

我为什么要写 B 站视频爬虫

这几天沉迷于 B 站的某些剪辑,洗脑循环中,如 up 主 上天下 的《白蛇:缘起》无对白版片尾曲《前世今生》完整版4分06秒 演唱:龚笑笑,链接如下

https://www.bilibili.com/video/BV1Qb411q7Xu

1.png

面对这样一个深得我心的视频,我脑海里瞬间冒出了下载到本地这个需求,一来方便离线播放,二来可以进行再创作(当然会注明出处~),于是乎,我上网查找了 B 站视频下载爬虫。

关于 B 站视频爬虫背后那些事

不查不知道,搜到好多可以下载 B 站视频的插件或库,you-get(https://github.com/soimort/you-get/releases/tag/v0.4.486) 和 IDM(一款多线程下载工具,有 exe 版和浏览器插件,可以嗅探并下载 web 上的媒体文件,包括图片、音频、视频),我试了下,然并软,坑太多,放弃了,还是自己写个吧~

神奇的是,我居然在搜到了自己以前写的一个 b 站视频爬虫(https://blog.csdn.net/ygdxt/article/details/84501500),我欣喜若狂地试了下,发现果然不行了,查阅资料改了 json 解析的一处代码,又可以跑起来了:

def parseHtml(self,html):
#用pq解析得到视频标题
doc = pq(html)
video_title = doc('#viewbox_report > h1 > span').text()

#用正则、json得到视频url;用pq失败后的无奈之举
pattern = r'\<script\>window\.__playinfo__=(.*?)\</script\>'
result = re.findall(pattern, html)[0]
temp = json.loads(result)
# 改了此处,原来是 temp['durl']
for item in temp['data']['durl']:
    if 'url' in item.keys():
        video_url = item['url']
        return{
            'title': video_title,
            'url': video_url
        }

好事多为,有的视频可以正确下载,而有的下载下来是 0kb,我觉得事情肯定没这么简单。进一步查阅资料得知,B 站 2018 前使用的视频格式都是 flv 的,后面技术升级转成 dash 了(可参见 b 站通知:https://www.bilibili.com/read/cv855111),而我之前的爬虫只是针对 flv 的,所以只能下载某些视频。

不仅如此,后面的视频都是声音和图像分离的,下载一个完整的视频我们需要分别下载视频和音频,视频和音频的地址获取和我之前的代码大同小异,不过要注意一点是,下载音视频必须先向 b 站发一个 OPTIONS 请求,我们常用 GET/POST,这个 OPTIONS 可能用的比较少,不过在 requests 库中使用方式区别不大,然后合成,合成音视频的主流库首选 ffmpeg ,嗯,大致有了个技术路线。

插一句,就在上一个月(2020/3/23),B 站将视频 av 号升级到了 BV 号

一直以来,AV号都是B站视频稿件的重要标识,在视频的传播和分享中起到了关键作用。

为了保护稿件信息安全,容纳更多投稿,维护UP主的权益,自2020年3月23日起,AV号将全面升级为BV号。与纯数字的AV号不同,BV号是一段由数字和大小写字母组成的字符串,经过算法自动生成。未来将统一使用BV号作为稿件标识。

同时,2020年3月23日前生成AV号的相关功能保持不变。例如,已分享的稿件链接,AV号搜索,以及动态、评论、私信中的高亮跳转。

此外,用户在复制BV号或者包含BV号的链接后,打开B站APP的同时会自动跳转至该视频

简而言之,就是 2020年3月23日之前的视频都是通过 av 确定的,现在也可以通过 BV 号确定,但是 2020年3月23日之后的视频,就只是 BV 号索引了。

所以我们干脆直接根据 BV 号爬取,网上的绝绝大部分 b 站视频爬虫都是针对 av 号的。

至于我是如何将思路写成代码,一并其中遇到的坑,此处可以省略 1 w 字...

还是直接看怎么获得该工具并使用吧~

如何使用

请欣赏下面这段演示视频,一目了然

点我,视频在此链接地址文章的末尾

关注公众号 月小水长,后台回复,干杯,即可获得下载工具

为了方便使用,将 ffmpeg 环境一并集成到下载工具中,无需重新配置 ffmpeg 环境,也无需配置 Python 环境,开箱即用~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容

  • ### YUV颜色空间 视频是由一帧一帧的数据连接而成,而一帧视频数据其实就是一张图片。 yuv是一种图片储存格式...
    天使君阅读 3,249评论 0 4
  • 亲手了结了它。 弥生撒过的最大的慌,骗了她,也骗了自己。 不过这样也好,对所有人都好。 我们都还有很长的路要走,一...
    阑尘阅读 96评论 0 0
  • 小路无力的说了一声:“这不是我想要的生活。”然后低下了头,拿起面前那杯已经有些凉的咖啡,抿了一口,就望向了窗外。冬...
    奇妙之源阅读 251评论 0 0
  • 我可能会在春天死去 像一颗种子 深埋土地 不晓得 是冷艳 还是明媚 只要骄傲着 都是我想看到的
    一腔方言阅读 113评论 0 0
  • 窗外的雨淅淅沥沥, 雨滴一点一点, 渐渐融化了那颗冻封的心, 一颗颗斗大的雨点, 是一个个奋不顾身投身于大地的精灵...
    Yayummy阅读 238评论 1 6