自动采集器怎么用(B站弹幕的爬取方法,只需找到参数cid)
优采云 发布时间: 2021-10-31 23:05自动采集器怎么用(B站弹幕的爬取方法,只需找到参数cid)
Python编程中如何实现下载器自动抓取采集B站弹幕,相信很多没有经验的人都束手无策。为此,本文总结了问题的原因和解决方法,通过这个文章希望大家能解决这个问题。
文章简单介绍爬取B站弹幕的方法,只要在视频中找到参数cid,就可以采集到视频下的所有弹幕;虽然想法很简单,但个人觉得还是比较麻烦。比如一天后,我觉得B站某段视频弹幕需要从头开始:找cid参数,写代码,重复单调;
所以我想知道是否可以一步完成。以后采集视频弹幕只需一步完成,比如输入我要抓取的视频链接,程序可以自动识别下载
达到效果
基于此,我借助PyQt5写了一个小工具,只需要提供目标视频的url和目标txt路径,程序会自动采集视频下的弹幕并保存数据到目标txt文本,先看看预览效果:
PS微信公众号对*敏*感*词*的帧数有限制,我在做*敏*感*词*的时候剪掉了一些内容,所以效果可能不流畅
整体工具实现分为UI界面和数据采集两部分。使用的 Python 库:
import requests
import re
from PyQt5.QtWidgets import *
from PyQt5 import QtCore
from PyQt5.QtGui import *
from PyQt5.QtCore import QThread, pyqtSignal
from bs4 import BeautifulSoup
用户界面
UI界面使用PyQt5,有两个按钮(开始下载,保存到),输入视频链接的编辑行控件和调试窗口;
代码显示如下:
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接口,然后使用regular requests和bs4包实现text采集
数据采集 部分代码:
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站弹幕的方法吗?如果您想学习更多技能或想了解更多相关内容,欢迎关注易速云行业资讯频道,感谢阅读!