python爬蟲(BeautifulSoup)爬取B站視頻字幕


比如“https://www.bilibili.com/video/BV1zU4y1p7L3”這個視頻,有1.2萬條彈幕

 

 

首先,B站視頻的彈幕是有專門的接口傳遞數據的:http://comment.bilibili.com/***.xml,中間的*號是播放視頻的id,怎么獲取?

播放視頻的時候按F12鍵,選擇找到heartbeat,拉到最下方formdata內有cid字樣即視頻id

 

 

訪問地址,http://comment.bilibili.com/309778762.xml拿到彈幕,但是這個接口只提供1000多條彈幕數據

 

 

 接下來,我們將數據全部爬取下來,本次就不使用xpath爬蟲來提取數據,使用BeautifulSoup來提取數據

網上安裝BeautifulSoup教程很多,這里不表,導入BeautifulSoup庫

from bs4 import BeautifulSoup
import requests
import re

爬取數據部分

url = 'http://comment.bilibili.com/309778762.xml'
html = requests.get(url)
html.encoding='utf8'

soup = BeautifulSoup(html.text,'lxml')
results = soup.find_all('d')

前面4行理解起來問題不大,常規步驟,關鍵在最后一行find內,可以表述問,查找文內所有標簽“d”的內容

因為彈幕的內容都存放在標簽d內

 

關於find_all的解析,請參看:https://www.cnblogs.com/keye/p/7868059.html,講的很清楚

 

然后就是對獲取數據的處理,只需要保留彈幕內容

for i in results:
    i = str(i)
    i = re.findall('">(.*?)</d>', i, re.S)[0]
    print(i)

全部腳本如下

# -*- coding: utf-8 -*-

from bs4 import BeautifulSoup
import requests
import re

url = 'http://comment.bilibili.com/309778762.xml'
html = requests.get(url)
html.encoding='utf8'

soup = BeautifulSoup(html.text,'lxml')
results = soup.find_all('d')

for i in results:
    i = str(i)
    i = re.findall('">(.*?)</d>', i, re.S)[0]
    print(i)

打印輸出

 

 

 

至於爬出來的數據怎么用,可以統計字頻,獲取做成詞雲(下圖),那是后面研究的了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM