比如“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)
打印輸出
至於爬出來的數據怎么用,可以統計字頻,獲取做成詞雲(下圖),那是后面研究的了