网站文章自动采集(《Python编程实现*敏*感*词*姐跳舞并生成词云视频示例》文章)

优采云 发布时间: 2022-01-20 07:10

  网站文章自动采集(《Python编程实现*敏*感*词*姐跳舞并生成词云视频示例》文章)

  大家好,我是小张!

  在《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界面使用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不为空且已设置目标文本存储路径时,可以进入data采集模块

  

  实现此功能的代码:

  

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包实现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 标记上。提取时,我选择重新正则匹配;但是这一步会消耗更多的内存。为了减少对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自动爬取的信息,请关注服务器之家其他相关话题文章!

  原文链接:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线