Python编程如何实现下载器自动爬取采集B站弹幕
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,Python编程如何实现下载器自动爬取采集B站弹幕,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。文章中简单介绍了B站弹幕的爬取方法,只需
千家信息网最后更新 2024年11月17日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安全错误
数据库的锁怎样保障安全
网络安全教育视频动画
网络安全法心得体会2019
敏捷模型是不是软件开发模型
网络安全执法检查讲话
服务器的管理配置
儿童网络安全教育宣传标语
地下城手游连不上服务器
数据库管理系统 课程设计
网络安全基础知识多选
搜狐读书软件开发
excel数据库教程
数据库怎么创建自己的
下列哪些属于关系型数据库
浙江特色软件开发配件
网络安全行为内容
护苗网络安全序列课程
数据库课程设计创新选题
加强网络安全与隐患治理
数据库搜索qq使用过的历史密码
webgl访问数据库
列出几条网络安全注意事项
服务器 合租
电源技术应用数据库
广西智慧管理平台软件开发
高校招生网络安全特长
软件开发实习生郑州
网络安全定位修改
oracle数据库视图授权
发展数据库的数据技术
服务器中间件有哪些