Python编程实现下载器自动爬取采集B站弹幕示例

 更新时间:2021年10月08日 14:13:55   作者:小张Python  
这篇文章主要介绍了使用Python编程来实现一个下载器可以自动爬取采集B站弹幕的示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

大家好,我是小张!

在《Python编程实现小姐姐跳舞并生成词云视频示例》文章中简单介绍了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界面

UI 界面借助了 PyQt5,放置了了两个按钮(开始下载、保存至),输入视频链接 的 editline 控件及调试窗口;

image-20210217185155009

代码如下:

    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 不为空以及目标文本存放路径已经设置好之后,才能进入数据采集模块

效果12

实现此功能的代码:

 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 参数(一连串数字)

image-20210217194745469

利用cid 参数构造该存放该视频弹幕的 API 接口,随后用常规 requests 和 bs4 包实现文本采集

image-20210217195252765

数据采集部分代码:

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站弹幕示例的详细内容,更多关于Python实现自动爬取的资料请关注脚本之家其它相关文章!

相关文章

  • python利用线程实现多任务

    python利用线程实现多任务

    这篇文章主要介绍了python利用线程实现多任务,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • 解决csv.writer写入文件有多余的空行问题

    解决csv.writer写入文件有多余的空行问题

    今天小编就为大家分享一篇解决csv.writer写入文件有多余的空行问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python如何读取指定csv单元格

    python如何读取指定csv单元格

    这篇文章主要介绍了python如何读取指定csv单元格方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python数据可视化之用Matplotlib绘制常用图形

    Python数据可视化之用Matplotlib绘制常用图形

    Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图. 我们需要知道不同的统计图的意义,以此来决定选择哪种统计图来呈现我们的数据,今天就带大家详细了解如何绘制这些常用图形,需要的朋友可以参考下
    2021-06-06
  • Python中xml和dict格式转换的示例代码

    Python中xml和dict格式转换的示例代码

    最近在做APP的接口,遇到XML格式的请求数据,费了很大劲来解决,下面小编给大家分享下Python中xml和dict格式转换问题,感兴趣的朋友跟随小编一起看看吧
    2019-11-11
  • Django框架实现逆向解析url的方法

    Django框架实现逆向解析url的方法

    这篇文章主要介绍了Django框架实现逆向解析url的方法,结合实例形式分析了Django逆向解析URL的原理、步骤、相关实现技巧与注意事项,需要的朋友可以参考下
    2018-07-07
  • 使用Python将PDF文件转存为图片的代码示例

    使用Python将PDF文件转存为图片的代码示例

    因工作中的某些奇葩要求,需要将PDF文件的每页内容转存成按顺序编号的图片,用第三方软件或者在线转换也可以,但批量操作还是Python方便,所以本文给大家介绍了使用Python将PDF文件转存为图片的方法,需要的朋友可以参考下
    2023-09-09
  • python pymysql peewee关于时区问题分析

    python pymysql peewee关于时区问题分析

    这篇文章主要为大家介绍了python pymysql peewee关于时区问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python爬虫实战案例之爬取喜马拉雅音频数据详解

    Python爬虫实战案例之爬取喜马拉雅音频数据详解

    这篇文章主要介绍了Python爬虫实战案例之取喜马拉雅音频数据详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Python字符串处理的8招秘籍(小结)

    Python字符串处理的8招秘籍(小结)

    这篇文章主要介绍了Python字符串处理的8招秘籍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论