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安全错误
数据库的锁怎样保障安全
卡丁车服务器怎么关
陕西网络安全知识竞赛平台
数据库有几个系统
5g物联网叠加网络安全和云计算
湖北软件开发价格表
数据库btree
java短信服务器
网络安全 舆论引导 战争
玩csgo官匹显示韩国服务器
我的世界多mod服务器
网络安全老师的短袖
上海网络时间服务器地址
八段锦下载软件开发
免费web文件服务器
网络数据库安全防护研究
网络安全知识讲座主题
达梦数据库业绩不好
wget服务器
忍三服务器升级
电力网络安全建设的意义
数据库中实现完整性约束的五种
广东省考服务器
汕头永和网络技术
达拉特旗沿黄高速服务器
阿里云 云服务器 自动化
北京车托帮网络技术有限公司公章
服务器心跳数据安全
沈阳寻求网络技术开发合作
网络安全14个领域
iris数据库