打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
25. Python爬虫教学:爬取B站视频源代码(复制可用)
  • 1. 准备工作

  • 2. 爬取视频源代码

  • 3. 更改代码

    • 1. 更改url

    • 2. 更改title

    • 3. 相对路径错误

  • 4. 温馨提示

1. 准备工作

  1. Python解释器(我安装的是Python3.9.6);

  2. pycharm编辑器或vscode编辑器;

  3. 安装requests。

安装命令:

pip install requests
  1. ffmpeg 软件。

ffmpeg 软件的作用合成视频。

因为b站的音频数据和视频画面是数据是分开的,需要用 ffmpeg 合成后才能得到我们要的视频。

ffmpeg 需要安装并配置变量环境后才能使用。

xyz77520520 获取 ffmpeg 软件。

  1. 在电脑桌面新建一个文件夹,命名为爬虫

  2. 爬虫文件夹里新建一个名为爬B站视频.py文件。

  3. 用编辑器打开爬虫文件夹,在爬B站视频.py文件中编写代码。

  4. 将下面的源代码复制到爬B站视频.py中运行即可。

【温馨提示】

源代码中的url变量需要修改成你要下载的网址。

不理解相对路径的同学,按照我的笔记用打开文件夹。

,打开的文件夹不同,相对路径不同。

不懂相对路径知识,你可能找不到下载的音频和视频画面,且程序也找不到要合成的音频和视频画面。

懂相对路径的同学就可以随意了。

2. 爬取视频源代码

# 导入数据请求模块 安装命令:pip install requests
import requests
# 正则表达式 不需要安装
import re
# 导入json 不需要安装
import json
# 导入进程模块
import subprocess  
# os模块是Python中整理文件和目录最为常用的模块
import os

# 要请求的网址:B站视频网址
# 这个变量需要替换成你要下载的视频网址
url = 'https://www.bilibili.com/video/BV1Vq4y1Z7op'

# 添加headers请求头,对Python解释器进行伪装
# referer 和 User-Agent要改写成字典形式
headers = {
    'referer':'https://www.bilibili.com',
    'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}

# 用 requests 的 get 方法访问网页
response = requests.get(url=url, headers=headers)

# 返回响应状态码:<Response [200]>
print('返回200,则网页请求成功:',response)

# .text获取网页源代码
# print(response.text)

# 提取视频标题
# 调用 re 的 findall 方法,去response.text中匹配我们要的标题
# 正则表达式提取的数据返回的是一个列表,用[0]从列表中取值
title = re.findall('<h1 title='(.*?)'', response.text)[0]
# 如果标题里有[\/:*?<>|]特殊字符,直接删除
title = re.sub(r'[\/:*?<>|]','',title)
print('视频标题为:',title)


# type函数查看title的数据类型
# print(type(title))

# 提取 playinfo 里的数据
# 调用 re的 findall 方法,去 response.text 中匹配我们要的数据
# 正则表达式提取的数据返回的是一个列表,用[0]从列表中取值
html_data =  re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]

# html_data是字符串类型,将字符串转换成字典
json_data=json.loads(html_data)

# 让pycharm控制台以json格式化输出
# 不影响程序,只改变pycharm或vscode编辑器的终端输出显示
# indent=4 缩进4个空格
json_dicts = json.dumps(json_data,indent=4)

# print(json_dicts)

# 提取视频画面网址
video_url = json_data['data']['dash']['video'][0]['baseUrl']
print('视频画面地址为:', video_url)
# 提取音频网址
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
print('音频地址为:', audio_url)

# response.content获取响应体的二进制数据
video_content = requests.get(url=video_url,headers=headers).content
audio_content = requests.get(url=audio_url,headers=headers).content

# 创建mp4文件,写入二进制数据
with open (title+'.mp4', mode = 'wb'as f :
    f.write(video_content)
# 创建mp3文件,写入二进制数据
with open (title+'.mp3', mode = 'wb'as f :
    f.write(audio_content)

print('数据写入成功!')

# 合成视频
# ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
cmd =f'ffmpeg -i {title}.mp4 -i {title}.mp3 -c:v copy -c:a aac -strict experimental {title}(最终版).mp4'
subprocess.run(cmd,shell=True)
print( '恭喜你,视频合成成功!'

# 删除不需要的mp3和mp4文件
os.remove(f'{title}.mp3')
os.remove(f'{title}.mp4')

print('程序结束!')

运行上述的代码,在我们刚才新建的爬虫文件夹中会多增加了一个视频。

3. 更改代码

1. 更改url

url = 'https://www.bilibili.com/video/BV1Vq4y1Z7op'

原则上你只需要把url变量中的网址替换成你需要的网址程序就能成功运行,下载到你想要的视频。

2. 更改title

如果数据写入成功,但没合成视频,可能是视频标题里含有的特殊字符导致视频没有合成成功。

不懂正则表达的同学,直接给变量title赋值,也课修改这个错误。

下面的代码是原本的title:

# 提取视频标题
# 调用 re 的 findall 方法,去response.text中匹配我们要的标题
# 正则表达式提取的数据返回的是一个列表,用[0]从列表中取值
title = re.findall('<h1 title='(.*?)'', response.text)[0]
# 如果标题里有[\/:*?<>|]特殊字符,直接删除
title = re.sub(r'[\/:*?<>|]','',title)
print('视频标题为:',title)

直接赋值修改变量title,注意下面的倒数第2行代码:

# 提取视频标题
# 调用 re 的 findall 方法,去response.text中匹配我们要的标题
# 正则表达式提取的数据返回的是一个列表,用[0]从列表中取值
title = re.findall('<h1 title='(.*?)'', response.text)[0]
# 如果标题里有[\/:*?<>|]特殊字符,直接删除
title = re.sub(r'[\/:*?<>|]','',title)
title = '爬虫教学'
print('视频标题为:',title)

3. 相对路径错误

还有的同学没有下载成功,就是相对路径错误。

那就是因为即不懂相对路径,又不按我的方式来打开文件夹。

建议回看以前的笔记:

68.Python的相对路径https://mp.weixin.qq.com/s?__biz=MzI2MzE1NTg2OA==&mid=2649776335&idx=1&sn=c3ee678200bd51695358c5e0f1818168&chksm=f244f93cc533702ad349b27669a303c57304fabefbd0a368b541a3d743891a45570b219b3dda#rd

69.open函数—打开文件并返回文件对象https://mp.weixin.qq.com/s?__biz=MzI2MzE1NTg2OA==&mid=2649776369&idx=1&sn=b3842a463115a64945fe9bc4b1c4d7d2&chksm=f244f902c533701417693e4ae6283e1aee79f62447ed7ec7176cfa2acac5d047170e5bc28c34#rd

70.with open( ) as 以自动关闭文件的方式打开文件https://mp.weixin.qq.com/s?__biz=MzI2MzE1NTg2OA==&mid=2649776391&idx=1&sn=24419a14191b74fb772e5a74df809466&chksm=f244f8f4c53371e264b4fe2779f2ba42fbc6f801ddd10ec86efa41f9a24bf93f274ebc47ca95#rd

4. 温馨提示

只想要源代码的可以直接复制,或者找 xyz77520520

想了解代码含义的,关注后面的笔记,会有详细介绍。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python采集B站最新周杰伦MV内容, 粉丝评论 并实现词云分析
Python爬虫进阶:爬取梨视频网站Top排行榜视频数据
用Python写一个自动下载B站视频、弹幕、评论的软件
爬虫笔记——东方财富科创板数据爬取(requests方法)
曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)
Python|爬取短视频
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服