哔哩哔哩-B站视频爬取-python爬虫

  • 由于b站的反爬机制将视频分为了音频数据和无声的视频数据,所以需要用ffmpeg合成后才能得到我们想要的视频。
  • ffmpeg需要安装并配置变量环境后才能使用。
  • 本代码主要使用正则表达式来实现。
  • 需自行install部分导包。

部分代码讲解:

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

 进入目标网页后,我们只需提取?前的url

headers = {
    'Referer': 'https://www.bilibili.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}

Referer 防盗链:告诉服务器我们请求的url网址是从哪里跳转过来的

response = requests.get(url=url, headers=headers)
# print(response.text)
title = re.findall('<h1 title="(.*?)"', response.text)[0]
title = re.sub(r'[\/:*?"<>| ]', '', title)
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
print(title)
json_data = json.loads(html_data)
print(html_data)

其中 print(html_data) 后,可以使用json解析器来分析,分别提取出视频和音频数据:

用 ffmpeg 来合并视频和音频:

cmd = f"ffmpeg -i {title}.mp4 -i {title}.mp3 -c:v copy -c:a aac -strict experimental {title}output.mp4"
subprocess.run(cmd, shell=True)

最后将原本分别爬取出的无声视频和音频删去 :

os.remove(f'{title}.mp4')
os.remove(f'{title}.mp3')

运行代码后,会看到一堆红色的代码,不要慌,那不是报错,而是 ffmpeg 在运行时产生的数据:

最后,可以在该.py的同级目录下看到合并后的视频:

 

 完整代码:

import requests
import re
import pprint
import json
import subprocess
import os

url = 'https://www.bilibili.com/video/BV1L841137ST/'
headers = {
    'Referer': 'https://www.bilibili.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
# print(response.text)
title = re.findall('<h1 title="(.*?)"', response.text)[0]
title = re.sub(r'[\/:*?"<>| ]', '', title)
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
print(title)
json_data = json.loads(html_data)
# print(html_data)
# print(type(json_data))

video_url = json_data['data']['dash']['video'][0]['baseUrl']
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
# print(video_url)
# print(audio_url)

video_content = requests.get(url=video_url, headers=headers).content
audio_content = requests.get(url=audio_url, headers=headers).content

with open(title + '.mp4', mode='wb') as f:
    f.write(video_content)
with open(title + '.mp3', mode='wb') as f:
    f.write(audio_content)
print(title, '数据保存成功')
cmd = f"ffmpeg -i {title}.mp4 -i {title}.mp3 -c:v copy -c:a aac -strict experimental {title}output.mp4"
subprocess.run(cmd, shell=True)

os.remove(f'{title}.mp4')
os.remove(f'{title}.mp3')
print(title, '视频合成完成')
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 基于python selenium实现B站直播弹幕和礼物信息爬虫源码+项目操作说明.zip 实现原理: 1.核心:数据去重 直播间网页页面可容纳的弹幕和礼物数据是有限的,且这些数据不断地在更新增加,超过一定量后,将会发生滚动覆盖。 程序每隔一段时间读取一次页面数据,若页面数据没有超出容量,则两次获取的数据在后段会有部分重复。若页面数据已经开始滚动,则两次获取的数据在位置上会发生错位。因此每获取一次数据就需要进行一次比较去重。 **去重原理如下图:(在twice数据列表中寻找与once数据列表末端元素相同的元素,扩展once数据列表。)** **一次去重后,once数据列表可以保留作为数据总列表,而twice数据列表可被新的一批数据覆盖,这样就可以实现重复去重** ![image](https://img.wenhairu.com/images/2021/02/25/EGByH.md.png) 2.主要方法 (1)网页数据定位方法:selenium浏览器对象访问指定直播间url,返回页面源码,再使用xpath定位对应html标签。 (2)加速去重方法:使用线程池,对弹幕和礼物列表同时去重。 (3)运行时长控制:分为两种模式,运行指定时长和运行至直播间关闭。 (4)抓取监控:每进行一次抓取并去重后,使用print输出一次数据列表,以实现对抓取数据的实时监控。 (5)数据抓取频率:分为两种模式,快模式和慢模式,具体可根据弹幕流量和直播间人数选择。快模式每0.5秒左右读一次页面数据,两类数据最大缓存量都为400条;慢模式每1秒左右读一次页面数据,两类数据最大缓存量都为200条。 (6)数据存储:当数据缓存量大于最大缓存量写入csv一次,并清空数据缓存,避免大量数据堆积。 三、使用注意事项 1.python环境下直接运行 (1)模块依赖安装: ```shell pip install selenium pip install lxml ``` (2)下载浏览器驱动(驱动与浏览器版本一定要对应)(浏览器推荐使用Firefox和Chrome):参考 [爬虫利器selenium和浏览器驱动安装教程](https://blog.csdn.net/qq_44032277/article/details/105793873) (3)修改浏览器驱动路径及配置: ```python # 如果使用的浏览器是chrome,第97行代码改为: bro = webdriver.Chrome('你的驱动路径', chrome_options = chrome_options) ``` ```python # 如果使用的浏览器是firefox,删除4行,改为: from selenium.webdriver.firefox.options import Options # 删除94-97行,改为: ff_options = Options() ff_options.add_argument('-headless') bro = webdriver.Firefox('你的驱动路径', firefox_options = ff_options) ``` (4)运行提示:程序在发送请求获取数据时可能因网络不稳定而报错,此时等待其快速重连即可,一般不会影响程序运行。 (5)建议:建议在控制台运行该py源码,因为其清理输出依赖于cmd 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值