欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python編程實(shí)現(xiàn)下載器自動(dòng)爬取采集B站彈幕示例

 更新時(shí)間:2021年10月08日 14:13:55   作者:小張Python  
這篇文章主要介紹了使用Python編程來(lái)實(shí)現(xiàn)一個(gè)下載器可以自動(dòng)爬取采集B站彈幕的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

大家好,我是小張!

在《Python編程實(shí)現(xiàn)小姐姐跳舞并生成詞云視頻示例》文章中簡(jiǎn)單介紹了B站彈幕的爬取方法,只需找到視頻中的參數(shù) cid,就能采集到該視頻下的所有彈幕;思路雖然很簡(jiǎn)單,但個(gè)人感覺(jué)還是比較麻煩,例如之后的某一天,我想采集B站上的某個(gè)視頻彈幕,還需要從頭開(kāi)始:找cid參數(shù)、寫(xiě)代碼,重復(fù)單調(diào);

因此我在想有沒(méi)有可能一步到位,以后采集某個(gè)視頻彈幕時(shí)只需一步操作,比如輸入想爬取的視頻鏈接,程序能自動(dòng)識(shí)別下載

實(shí)現(xiàn)效果

基于此,借助 PyQt5 我寫(xiě)了一個(gè)小工具,只需提供目標(biāo)視頻的 url 以及目標(biāo) txt 路徑,程序?qū)υ撘曨l下的彈幕自動(dòng)采集并把數(shù)據(jù)保存至目標(biāo)txt文本,先看一下預(yù)覽效果:

效果

PS 微信公號(hào)對(duì)動(dòng)圖幀數(shù)有限制,制作動(dòng)圖時(shí)我刪減了一部分內(nèi)容,因此效果可能會(huì)不太流暢

工具實(shí)現(xiàn)整體分為UI界面、數(shù)據(jù)采集 兩個(gè)部分,用到的Python庫(kù):

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,放置了了兩個(gè)按鈕(開(kāi)始下載、保存至),輸入視頻鏈接 的 editline 控件及調(diào)試窗口;

image-20210217185155009

代碼如下:

    def __init__(self,parent =None):
        super(Ui_From,self).__init__(parent=parent)
        self.setWindowTitle("B站彈幕采集")
        self.setWindowIcon(QIcon('pic.jpg'))# 圖標(biāo)
        self.top_label = QLabel("作者:小張\n 微信公號(hào):小張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("開(kāi)始下載")
        self.pushButton.setEnabled(False)#關(guān)閉啟動(dòng)
        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)

當(dāng) url 不為空以及目標(biāo)文本存放路徑已經(jīng)設(shè)置好之后,才能進(jìn)入數(shù)據(jù)采集模塊

效果12

實(shí)現(xiàn)此功能的代碼:

 def syns_lineEdit(self):
        if self.editline1.text():
            self.pushButton.setEnabled(True)#打開(kāi)按鈕

  def savePushbutton(self):
        savePath = QFileDialog.getSaveFileName(self,'Save Path','/','txt(*.txt)')
        if savePath[0]:# 選中 txt 文件路徑
            self.savepath  = str(savePath[0])#進(jìn)行賦值

數(shù)據(jù)采集

程序獲取到 url 之后,第一步就是訪問(wèn) url 提取當(dāng)前頁(yè)面中該視頻的cid 參數(shù)(一連串?dāng)?shù)字)

image-20210217194745469

利用cid 參數(shù)構(gòu)造該存放該視頻彈幕的 API 接口,隨后用常規(guī) requests 和 bs4 包實(shí)現(xiàn)文本采集

image-20210217195252765

數(shù)據(jù)采集部分代碼:

f = open(self.savepath, 'w+', encoding='utf-8')  # 打開(kāi) txt 文件
        res = requests.get(url)
        res.encoding = 'utf-8'
        soup = BeautifulSoup(res.text, 'lxml')
        items = soup.find_all('d')  # 找到 d 標(biāo)簽
        for item in items:
            text = item.text
            f.write(text)
            f.write('\n')
        f.close()

cid 參數(shù) 并不是位于常規(guī) html 的標(biāo)簽上,提取時(shí)我選擇 re 正則匹配;但這一步驟比較耗機(jī)子內(nèi)存,為了減少對(duì)UI界面響應(yīng)速度的影響,這一步驟單獨(dú)用一個(gè)線程來(lái)實(shí)現(xiàn)

class Parsetext(QThread):
    trigger = pyqtSignal(str) # 信號(hào)發(fā)射;
    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)

小結(jié)

好了,以上就是本篇文章的全部?jī)?nèi)容了,希望內(nèi)容能夠?qū)δ愎ぷ骰蛘邔W(xué)習(xí)上有所幫助。

最后感謝大家的閱讀,我們下期見(jiàn)

以上就是Python編程實(shí)現(xiàn)下載器自動(dòng)采集B站彈幕示例的詳細(xì)內(nèi)容,更多關(guān)于Python實(shí)現(xiàn)自動(dòng)爬取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python利用線程實(shí)現(xiàn)多任務(wù)

    python利用線程實(shí)現(xiàn)多任務(wù)

    這篇文章主要介紹了python利用線程實(shí)現(xiàn)多任務(wù),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • 解決csv.writer寫(xiě)入文件有多余的空行問(wèn)題

    解決csv.writer寫(xiě)入文件有多余的空行問(wèn)題

    今天小編就為大家分享一篇解決csv.writer寫(xiě)入文件有多余的空行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python如何讀取指定csv單元格

    python如何讀取指定csv單元格

    這篇文章主要介紹了python如何讀取指定csv單元格方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Python數(shù)據(jù)可視化之用Matplotlib繪制常用圖形

    Matplotlib能夠繪制折線圖、散點(diǎn)圖、柱狀圖、直方圖、餅圖. 我們需要知道不同的統(tǒng)計(jì)圖的意義,以此來(lái)決定選擇哪種統(tǒng)計(jì)圖來(lái)呈現(xiàn)我們的數(shù)據(jù),今天就帶大家詳細(xì)了解如何繪制這些常用圖形,需要的朋友可以參考下
    2021-06-06
  • Python中xml和dict格式轉(zhuǎn)換的示例代碼

    Python中xml和dict格式轉(zhuǎn)換的示例代碼

    最近在做APP的接口,遇到XML格式的請(qǐng)求數(shù)據(jù),費(fèi)了很大勁來(lái)解決,下面小編給大家分享下Python中xml和dict格式轉(zhuǎn)換問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • Django框架實(shí)現(xiàn)逆向解析url的方法

    Django框架實(shí)現(xiàn)逆向解析url的方法

    這篇文章主要介紹了Django框架實(shí)現(xiàn)逆向解析url的方法,結(jié)合實(shí)例形式分析了Django逆向解析URL的原理、步驟、相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • 使用Python將PDF文件轉(zhuǎn)存為圖片的代碼示例

    使用Python將PDF文件轉(zhuǎn)存為圖片的代碼示例

    因工作中的某些奇葩要求,需要將PDF文件的每頁(yè)內(nèi)容轉(zhuǎn)存成按順序編號(hào)的圖片,用第三方軟件或者在線轉(zhuǎn)換也可以,但批量操作還是Python方便,所以本文給大家介紹了使用Python將PDF文件轉(zhuǎn)存為圖片的方法,需要的朋友可以參考下
    2023-09-09
  • python pymysql peewee關(guān)于時(shí)區(qū)問(wèn)題分析

    python pymysql peewee關(guān)于時(shí)區(qū)問(wèn)題分析

    這篇文章主要為大家介紹了python pymysql peewee關(guān)于時(shí)區(qū)問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python爬蟲(chóng)實(shí)戰(zhàn)案例之爬取喜馬拉雅音頻數(shù)據(jù)詳解

    Python爬蟲(chóng)實(shí)戰(zhàn)案例之爬取喜馬拉雅音頻數(shù)據(jù)詳解

    這篇文章主要介紹了Python爬蟲(chóng)實(shí)戰(zhàn)案例之取喜馬拉雅音頻數(shù)據(jù)詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Python字符串處理的8招秘籍(小結(jié))

    Python字符串處理的8招秘籍(小結(jié))

    這篇文章主要介紹了Python字符串處理的8招秘籍,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論