爬取B站弹幕的小工具
Fri, Feb 26, 2021
One-minute read
做一个简单的爬取弹幕的小工具
网络爬虫的概念一直很火热
一直没有尝试过
这次通过自己简单的学习
做个简单的爬虫小工具
弹幕爬取
代码原理十分简单
B站视频格式组成为
https://m.bilibili.com/video/+BV
通过输入B站的视频号
爬取任意弹幕
class BiliSpider:
def __init__(self, BV, FilePath):
# 构造要爬取的视频url地址
self.BVurl = "https://m.bilibili.com/video/" + BV
self.headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Mobile Safari/537.36"}
self.path = FilePath
def getXml_url(self):
# 获取该视频网页的内容
response = requests.get(self.BVurl, headers=self.headers)
html_str = response.content.decode()
# 使用正则找出该弹幕地址
# 格式为:https://comment.bilibili.com/168087953.xml
# 我们分隔出的是地址中的弹幕文件名,即 168087953
getWord_url = re.findall(r'"cid":[\d]*', html_str)
# print(getWord_url)
getWord_url = getWord_url[0].replace('"cid":', "").replace(" ", "")
# 组装成要请求的xml地址
xml_url = "https://comment.bilibili.com/{}.xml".format(getWord_url)
return xml_url
GUI界面
自己也尝试做了一个简单的GUI界面
使用PyQt5实现
不过界面的效果着实略丑
class Danmu(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.review = QLineEdit(self)
self.file = QLineEdit(self)
self.outfile = QLineEdit(self)
self.pic = QLineEdit(self)
self.danmu = QLabel(self)
self.lb = QLabel(self)
btn = QPushButton("获取视频号")
getbtn = QPushButton("爬取弹幕")
cloudbtn = QPushButton("生成云图")
filebtn = QPushButton("打开文件夹")
outfilebtn = QPushButton("文件名")
picbtn = QPushButton("图片名")
# review.textChanged[str].connect(self.onChanged)
grid = QGridLayout()
grid.setSpacing(5)
grid.addWidget(btn, 1, 0)
grid.addWidget(self.review, 1, 1)
grid.addWidget(filebtn, 2, 0)
grid.addWidget(self.file, 2, 1)
grid.addWidget(outfilebtn, 3, 0)
grid.addWidget(self.outfile, 3, 1)
grid.addWidget(picbtn, 4, 0)
grid.addWidget(self.pic, 4, 1)
grid.addWidget(getbtn, 5, 0)
grid.addWidget(self.danmu, 5, 1)
grid.addWidget(cloudbtn, 6, 0)
grid.addWidget(self.lb, 6, 1, 4, 1)
btn.clicked.connect(self.addNum)
getbtn.clicked.connect(self.get_Danmu1)
cloudbtn.clicked.connect(self.Getcloud)
filebtn.clicked.connect(self.openFile)
outfilebtn.clicked.connect(self.get_name)
# picbtn.clicked.connect(self.getpic_name)
self.setLayout(grid)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle('爬取弹幕小工具')
self.show()
实现效果
将爬取到弹幕保存为csv文件
最后利用wordcloud库实现云图