91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python編程如何實現下載器自動爬取采集B站彈幕

發布時間:2021-10-08 15:25:48 來源:億速云 閱讀:125 作者:柒染 欄目:開發技術

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界面

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站彈幕的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

八宿县| 绵阳市| 三门峡市| 临清市| 龙川县| 衡阳县| 南岸区| 宁明县| 易门县| 宁乡县| 无极县| 小金县| 周宁县| 固原市| 吉水县| 固安县| 淮滨县| 武邑县| 封丘县| 冕宁县| 贡山| 舒兰市| 兖州市| 佛学| 辽阳市| 福州市| 商丘市| 宁都县| 南靖县| 漳平市| 永康市| 湖南省| 玉环县| 冀州市| 吉木萨尔县| 永胜县| 府谷县| 雅安市| 庆云县| 玛纳斯县| 淳化县|