人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

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

發(fā)布日期:2021-12-28 00:12 | 文章來源:腳本之家

大家好,我是小張!

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

因此我在想有沒有可能一步到位,以后采集某個視頻彈幕時只需一步操作,比如輸入想爬取的視頻鏈接,程序能自動識別下載

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

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

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

工具實(shí)現(xiàn)整體分為UI界面、數(shù)據(jù)采集 兩個部分,用到的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 控件及調(diào)試窗口;

代碼如下:

 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 微信公號:小張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)#關(guān)閉啟動
  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ù)采集模塊

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

 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])#進(jìn)行賦值

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

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

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

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

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 標(biāo)簽
  for item in items:
text = item.text
f.write(text)
f.write('\n')
  f.close()

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

class Parsetext(QThread):
 trigger = pyqtSignal(str) # 信號發(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é)

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

最后感謝大家的閱讀,我們下期見

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

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部