你會(huì)使用python爬蟲抓取彈幕嗎
前言
時(shí)隔108天,何同學(xué)在B站發(fā)布了最新的視頻,《【何同學(xué)】我用108天開了個(gè)燈…》。那么就讓我們用爬蟲,爬取視頻的彈幕,看看小伙伴們是怎么評價(jià)的吧
一、爬蟲是什么?
百度百科這樣說:自動(dòng)獲取網(wǎng)頁內(nèi)容的程序。在我理解看來,爬蟲就是~~“在網(wǎng)絡(luò)上爬來爬去的…”住口!~~
那么接下來就讓我們看看如何養(yǎng)搬運(yùn)B站彈幕的“蟲”吧
二、飼養(yǎng)步驟
1.請求彈幕
首先,得知道爬取的網(wǎng)站url是什么。對于B站彈幕而言,彈幕所在位置是有固定格式的:
http://comment.bilibili.com/+cid+.xml
ok,那么問題來了,cid是什么呢?不用管是什么,我告訴你怎么獲取。
1.打開視頻后點(diǎn)擊F12,切換到“網(wǎng)絡(luò)”,在篩選器處填入“cid”進(jìn)行篩選。

2.點(diǎn)擊篩選出的網(wǎng)絡(luò)信息,在右端Payload處找到cid

3.到此,我們就知道了何同學(xué)視頻彈幕的網(wǎng)絡(luò)鏈接:
http://comment.bilibili.com/499893135.xml
4.接著就是發(fā)送網(wǎng)絡(luò)請求,獲取網(wǎng)絡(luò)頁面資源。Python有很多發(fā)送網(wǎng)絡(luò)請求的庫。比如:
- urllib庫
- requests庫
我們用reaquests庫演示
發(fā)送請求的代碼如下
(示例):
#【何同學(xué)】我用108天開了個(gè)燈......視頻的cid:499893135 #彈幕所在地 url = "http://comment.bilibili.com/499893135.xml" #發(fā)送請求 req = requests.get(url = url) #獲取內(nèi)容響應(yīng)的內(nèi)容 html_byte = req.content #將byte轉(zhuǎn)為str html_str = str(html_byte,"utf-8")
還有個(gè)值得提一下的地方是,發(fā)送請求的請求頭可以加上,偽裝自己是瀏覽器訪問??梢酝ㄟ^header參數(shù),加上user-agent,獲取方式如下:

那么,代碼就是下面這樣了:
#假裝自己是瀏覽器
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43'
}
#【何同學(xué)】我用108天開了個(gè)燈......視頻的cid:499893135
#彈幕所在地
url = "http://comment.bilibili.com/499893135.xml"
#發(fā)送請求
req = requests.get(url = url, headers=header)
#獲取內(nèi)容響應(yīng)的內(nèi)容
html_byte = req.content
#將byte轉(zhuǎn)為str
html_str = str(html_byte,"utf-8")
2.解析彈幕
html_str是html文件的格式,我們需要對其進(jìn)行處理,來獲取我們想要的信息。這個(gè)時(shí)候,BeautifulSoup庫就要閃亮登場了,我們用它來處理得到的html文件
代碼如下(示例):
#解析
soup = BeautifulSoup(html,'html.parser')
#找到html文件里的<d>標(biāo)簽
results = soup.find_all('d')
#把標(biāo)簽里的文本提取出來
contents = [x.text for x in results]
#存為字典
dic ={"contents" : contents}
contents就是彈幕字符串列表了,存成字典是為了下一步…
3.存儲(chǔ)彈幕
把彈幕信息存儲(chǔ)成excel,也有好多庫可以用。比如:
- xlwt庫
- pandas庫
我們就用pandas庫把
代碼如下(示例):
把用第二步得到的字典創(chuàng)建dataFrame,然后用pandas庫的一個(gè)API存下就行了
#用字典創(chuàng)建了一個(gè)電子表格
df = pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
4.總代碼
import requests
from bs4 import BeautifulSoup
import pandas as pd
def main():
html = askUrl()
dic =analyse(html)
writeExcel(dic)
def askUrl():
#假裝自己是瀏覽器
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43'
}
#【何同學(xué)】我用108天開了個(gè)燈......視頻的cid:499893135
#彈幕所在地
url = "http://comment.bilibili.com/499893135.xml"
req = requests.get(url = url, headers=header)
html_byte = req.content#字節(jié)
html_str = str(html_byte,"utf-8")
return html_str
def analyse(html):
soup = BeautifulSoup(html,'html.parser')
results = soup.find_all('d')
#x.text表示要放到contents中的值
contents = [x.text for x in results]
#保存結(jié)果
dic ={"contents" : contents}
return dic
def writeExcel(dic):
#用字典創(chuàng)建了一個(gè)電子表格
df = pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
if __name__ == '__main__':
main()
三、總結(jié)
爬蟲簡單來說呢,就三步:
1.發(fā)送網(wǎng)絡(luò)請求,獲取資源
2.進(jìn)行搜索等操作來獲取有用信息
3.存儲(chǔ)信息
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
在python的類中動(dòng)態(tài)添加屬性與生成對象
這篇文章給大家介紹了如何在python的類中動(dòng)態(tài)添加屬性和生成對象,文中通過幾個(gè)方面來進(jìn)行介紹,對這感興趣的朋友們可以學(xué)習(xí)學(xué)習(xí)。2016-09-09
python實(shí)現(xiàn)異步回調(diào)機(jī)制代碼分享
本文介紹了python實(shí)現(xiàn)異步回調(diào)機(jī)制的功能,大家參考使用吧2014-01-01
關(guān)于python中導(dǎo)入文件到list的問題
這篇文章主要介紹了關(guān)于python中導(dǎo)入文件到list的問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
云原生Docker部署Django和mysql項(xiàng)目全過程
最近在學(xué)習(xí)用docker部署Django項(xiàng)目,經(jīng)過百折不撓的鼓搗,終于將項(xiàng)目部署成功,下面這篇文章主要給大家介紹了關(guān)于云原生Docker部署Django和mysql項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Python無參裝飾器的實(shí)現(xiàn)方案及優(yōu)化
裝飾器(Decorators)是 Python 的一個(gè)重要部分,所謂裝飾器就是閉包函數(shù)的一種應(yīng)用場景,這篇文章主要給大家介紹了關(guān)于Python無參裝飾器的相關(guān)資料,需要的朋友可以參考下2021-08-08

