你會使用python爬蟲抓取彈幕嗎
前言
時隔108天,何同學(xué)在B站發(fā)布了最新的視頻,《【何同學(xué)】我用108天開了個燈…》。那么就讓我們用爬蟲,爬取視頻的彈幕,看看小伙伴們是怎么評價的吧
一、爬蟲是什么?
百度百科這樣說:自動獲取網(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天開了個燈......視頻的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")
還有個值得提一下的地方是,發(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天開了個燈......視頻的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)行處理,來獲取我們想要的信息。這個時候,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.存儲彈幕
把彈幕信息存儲成excel,也有好多庫可以用。比如:
- xlwt庫
- pandas庫
我們就用pandas庫把
代碼如下(示例):
把用第二步得到的字典創(chuàng)建dataFrame,然后用pandas庫的一個API存下就行了
#用字典創(chuàng)建了一個電子表格 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天開了個燈......視頻的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)建了一個電子表格 df = pd.DataFrame(dic) df["contents"].to_excel('htx.xlsx') if __name__ == '__main__': main()
三、總結(jié)
爬蟲簡單來說呢,就三步:
1.發(fā)送網(wǎng)絡(luò)請求,獲取資源
2.進(jìn)行搜索等操作來獲取有用信息
3.存儲信息
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
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í)或工作具有一定的參考借鑒價值,需要的朋友可以參考下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-12Python無參裝飾器的實(shí)現(xiàn)方案及優(yōu)化
裝飾器(Decorators)是 Python 的一個重要部分,所謂裝飾器就是閉包函數(shù)的一種應(yīng)用場景,這篇文章主要給大家介紹了關(guān)于Python無參裝飾器的相關(guān)資料,需要的朋友可以參考下2021-08-08