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

python爬b站

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

起因

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

前期准备

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

分析

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

这样音频文件和视频文件的地址我么都拿到了,随后就可以开始下载了,下载之后使用ffmpeg将两个文件操作一下就可以了。这里有ffmpeg的安装教程,大家可以看一下,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用于取出下图这个部分的内容
python爬b站视频 人生苦短 我用python_第6张图片
infoink是为了把window._playinfo_去掉,这样拿到的就是可以转换为json的字符串
这样就可以拿到视频和音频的url了
代码如下

def downloadVideo(url):
    # 获取网页源代码
    html = requests.get(url).text
    # 拿到script的内容
    info = re.findall(valink, html)
    # 第一个就是playinfo的那个script
    info2 = str(info[0])
    # 这一个是存放视频信息的scripte
    info3 = str(info[1])
    nameAnd=re.findall(nameink,info3)
    # 把window._playinfo_去掉,拿到一个可以转换为json的字符串
    videoAndAudio = re.findall(infoink, info2)
    # str转json
    jsonobject = 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

成果

python爬b站视频 人生苦短 我用python_第7张图片

总结

全部代码就不贴了,兄弟们按照这个流程就可以实现,过程还是比较简单的,自己用用就好。希望和大家一起进步python爬b站视频 人生苦短 我用python_第8张图片

你可能感兴趣的:(爬虫,python,ffmpeg,python,爬虫)