Python编程如何实现下载器自动爬取采集B站弹幕
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,Python编程如何实现下载器自动爬取采集B站弹幕,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。文章中简单介绍了B站弹幕的爬取方法,只需
千家信息网最后更新 2025年02月19日Python编程如何实现下载器自动爬取采集B站弹幕文章中简单介绍了B站弹幕的爬取方法,只需找到视频中的参数 cid,就能采集到该视频下的所有弹幕;思路虽然很简单,但个人感觉还是比较麻烦,例如之后的某一天,我想采集B站上的某个视频弹幕,还需要从头开始:找cid参数、写代码,重复单调;
Python编程如何实现下载器自动爬取采集B站弹幕,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
文章中简单介绍了B站弹幕的爬取方法,只需找到视频中的参数 cid,就能采集到该视频下的所有弹幕;思路虽然很简单,但个人感觉还是比较麻烦,例如之后的某一天,我想采集B站上的某个视频弹幕,还需要从头开始:找cid参数、写代码,重复单调;
因此我在想有没有可能一步到位,以后采集某个视频弹幕时只需一步操作,比如输入想爬取的视频链接,程序能自动识别下载
实现效果
基于此,借助 PyQt5 我写了一个小工具,只需提供目标视频的 url 以及目标 txt 路径,程序对该视频下的弹幕自动采集并把数据保存至目标txt文本,先看一下预览效果:
PS 微信公号对动图帧数有限制,制作动图时我删减了一部分内容,因此效果可能会不太流畅
工具实现整体分为UI界面、数据采集 两个部分,用到的Python库:
import requestsimport refrom PyQt5.QtWidgets import *from PyQt5 import QtCorefrom PyQt5.QtGui import *from PyQt5.QtCore import QThread, pyqtSignalfrom bs4 import BeautifulSoup
UI界面
UI 界面借助了 PyQt5,放置了了两个按钮(开始下载、保存至),输入视频链接 的 editline 控件及调试窗口;
代码如下:
def __init__(self,parent =None): super(Ui_From,self).__init__(parent=parent) self.setWindowTitle("B站弹幕采集") self.setWindowIcon(QIcon('pic.jpg'))# 图标 self.top_label = QLabel("作者:小张\n 微信公号:小张Python") self.top_label.setAlignment(QtCore.Qt.AlignHCenter) self.top_label.setStyleSheet('color:red;font-weight:bold;') self.label = QLabel("B站视频url") self.label.setAlignment(QtCore.Qt.AlignHCenter) self.editline1 = QLineEdit() self.pushButton = QPushButton("开始下载") self.pushButton.setEnabled(False)#关闭启动 self.Console = QListWidget() self.saveButton = QPushButton("保存至") self.layout = QGridLayout() self.layout.addWidget(self.top_label,0,0,1,2) self.layout.addWidget(self.label,1,0) self.layout.addWidget(self.editline1,1,1) self.layout.addWidget(self.pushButton,2,0) self.layout.addWidget(self.saveButton,3,0) self.layout.addWidget(self.Console,2,1,3,1) self.setLayout(self.layout) self.savepath = None self.pushButton.clicked.connect(self.downButton) self.saveButton.clicked.connect(self.savePushbutton) self.editline1.textChanged.connect(self.syns_lineEdit)
当 url 不为空以及目标文本存放路径已经设置好之后,才能进入数据采集模块
实现此功能的代码:
def syns_lineEdit(self): if self.editline1.text(): self.pushButton.setEnabled(True)#打开按钮 def savePushbutton(self): savePath = QFileDialog.getSaveFileName(self,'Save Path','/','txt(*.txt)') if savePath[0]:# 选中 txt 文件路径 self.savepath = str(savePath[0])#进行赋值
数据采集
程序获取到 url 之后,第一步就是访问 url 提取当前页面中该视频的cid 参数(一连串数字)
利用cid 参数构造该存放该视频弹幕的 API 接口,随后用常规 requests 和 bs4 包实现文本采集
数据采集部分代码:
f = open(self.savepath, 'w+', encoding='utf-8') # 打开 txt 文件 res = requests.get(url) res.encoding = 'utf-8' soup = BeautifulSoup(res.text, 'lxml') items = soup.find_all('d') # 找到 d 标签 for item in items: text = item.text f.write(text) f.write('\n') f.close()
cid 参数 并不是位于常规 html 的标签上,提取时我选择 re 正则匹配;但这一步骤比较耗机子内存,为了减少对UI界面响应速度的影响,这一步骤单独用一个线程来实现
class Parsetext(QThread): trigger = pyqtSignal(str) # 信号发射; def __init__(self,text,parent = None): super(Parsetext,self).__init__() self.text = text def __del__(self): self.wait() def run(self): print('解析 -----------{}'.format(self.text)) result_url = re.findall('.*?"baseUrl":"(.*?)","base_url".*?', self.text)[0] self.trigger.emit(result_url)
看完上述内容,你们掌握Python编程如何实现下载器自动爬取采集B站弹幕的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
视频
参数
数据
代码
数据采集
界面
目标
内容
只需
效果
文本
方法
程序
路径
编程
两个
工具
常规
按钮
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
武义协同软件开发
卫星互联网与金融科技
潍坊ios软件开发哪家做的好
服务器出现故障黑屏
查询数据库多值
网络安全鉴别是什么意思
国家网络安全教育周教育材料
共享单车软件开发费用
软件开发合同追加预算
网络安全保护的四新
java 数据写入数据库
访问国外网站 代理服务器
病毒整合数据库
七日杀链接服务器组件有问题
中国数据库软件公司排名
hive数据库获取当天日期
gprs模块 服务器
上海迈腾网络技术有限公司
光纤网络技术现状
数据库TRG
wifi网络安全版本过低
互联网最快的科技新闻
搜亚网络技术服务刷赞
普陀区网络技术服务前景
软件开发人员转项目实施
云服务器收费价格对比
全国首个皮炎湿疹数据库
数据库查看所有
惠普服务器按什么键进入PE
成都时代网络技术有限公司