热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

b站爬视频人生苦短我用python

b站爬视频起因前期准备分析代码音频和视频整合的工具类分析页面成果总结起因不知道兄弟们有没有遇到过b站视频经常下架的问题,就比如我现在想在b站找一个老师的课程


b站爬视频

  • 起因
  • 前期准备
  • 分析
  • 代码
    • 音频和视频整合的工具类
    • 分析页面
  • 成果
  • 总结


起因

不知道兄弟们有没有遇到过b站视频经常下架的问题,就比如我现在想在b站找一个老师的课程,运气好可以找到,但经常看了一段时间之后可能就会下架,然后继续找,过不了多久又会下架,这样的循环搞得我好烦呀,这时候我突然想起来万能的python,python爬b站视频咋样?说干就干
在这里插入图片描述


前期准备

python环境必不可少,同时需要ffmpeg,一台可以上网的电脑


分析

首先随便打开一个视频,然后右键查看网页源代码
在这里插入图片描述
由于展示的源代码格式有点乱,所以我选择复制到vscode中查看
在这里插入图片描述
这时候看着就舒服多了,细心的朋友可能已经发现baseUrl,然后我们复制一下这个baseUrl,在浏览器中打开康康,果然不出所料
在这里插入图片描述
还是老实巴交的用python访问吧,header头设置好之后就可以直接访问了,至于header头怎么设置,相信兄弟们都懂,一切就绪之后可以拿到这个文件,值得注意的是b站的视频文件和音频文件是分开存储的,因此我们还需要下载音频文件,音频文件url的位置和视频文件url的位置靠很近,就在audio这里存放着
在这里插入图片描述

这样音频文件和视频文件的地址我么都拿到了,随后就可以开始下载了,下载之后使用ffmpeg将两个文件操作一下就可以了。


代码


音频和视频整合的工具类

import os# 声音视频结合
def videoMixAudio(videourl, audiourl, mp4url):com = f'D:\\tool\\ffmpeg\\bin\\ffmpeg.exe -i "{audiourl}" -i "{videourl}" ' \f'-acodec copy -vcodec copy "{mp4url}"'os.system(com)os.remove(videourl)os.remove(audiourl)

这里解释一下。videourl是视频文件的全路径,audiourl是音频文件的全路径,mp4url则是生成的有声音的视频的位置,然后通过调用ffmpeg来对音频和视频文件进行合成,没有使用ffmpeg的同学们可以采用格式工厂的方式对这两个文件操作进行操作也是可以的。


分析页面

使用到了这三个匹配规则

# 拿到')
# 拿到window.__playinfo__后面的内容
infoink = re.compile(r'window.__playinfo__=(.*)')
# 这个是为了拿到视频的名字 可以选择不用
nameink = re.compile(r'window.__INITIAL_STATE__=(.*);\(function')

valink用于取出下图这个部分的内容
在这里插入图片描述
infoink是为了把window._playinfo_去掉,这样拿到的就是可以转换为json的字符串
这样就可以拿到视频和音频的url了
代码如下

def downloadVideo(url):# 获取网页源代码html = requests.get(url).text# 拿到script的内容info = re.findall(valink, html)# 第一个就是playinfo的那个scriptinfo2 = str(info[0])# 这一个是存放视频信息的scripteinfo3 = str(info[1])nameAnd=re.findall(nameink,info3)# 把window._playinfo_去掉,拿到一个可以转换为json的字符串videoAndAudio = re.findall(infoink, info2)# str转jsonjsonobject = json.loads(videoAndAudio[0])nameobject = json.loads(nameAnd[0])name=nameobject["videoData"]["title"]# 获取视频和音频的链接videoFile = jsonobject["data"]["dash"]["video"][0]["baseUrl"]audioFile = jsonobject["data"]["dash"]["audio"][0]["baseUrl"]

拿到链接之后就可以开始下载了,记住下载的时候要设置好header


成果

在这里插入图片描述


总结

全部代码就不贴了,兄弟们按照这个流程就可以实现,过程还是比较简单的,自己用用就好。
在这里插入图片描述


推荐阅读
author-avatar
Kanxsg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有