你會(huì)使用python爬蟲(chóng)抓取彈幕嗎
前言
時(shí)隔108天,何同學(xué)在B站發(fā)布了最新的視頻,《【何同學(xué)】我用108天開(kāi)了個(gè)燈…》。那么就讓我們用爬蟲(chóng),爬取視頻的彈幕,看看小伙伴們是怎么評(píng)價(jià)的吧
一、爬蟲(chóng)是什么?
百度百科這樣說(shuō):自動(dòng)獲取網(wǎng)頁(yè)內(nèi)容的程序。在我理解看來(lái),爬蟲(chóng)就是~~“在網(wǎng)絡(luò)上爬來(lái)爬去的…”住口!~~
那么接下來(lái)就讓我們看看如何養(yǎng)搬運(yùn)B站彈幕的“蟲(chóng)”吧
二、飼養(yǎng)步驟
1.請(qǐng)求彈幕
首先,得知道爬取的網(wǎng)站url是什么。對(duì)于B站彈幕而言,彈幕所在位置是有固定格式的:
http://comment.bilibili.com/+cid+.xml
ok,那么問(wèn)題來(lái)了,cid是什么呢?不用管是什么,我告訴你怎么獲取。
1.打開(kāi)視頻后點(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ò)請(qǐng)求,獲取網(wǎng)絡(luò)頁(yè)面資源。Python有很多發(fā)送網(wǎng)絡(luò)請(qǐng)求的庫(kù)。比如:
- urllib庫(kù)
- requests庫(kù)
我們用reaquests庫(kù)演示
發(fā)送請(qǐng)求的代碼如下
(示例):
#【何同學(xué)】我用108天開(kāi)了個(gè)燈......視頻的cid:499893135 #彈幕所在地 url = "http://comment.bilibili.com/499893135.xml" #發(fā)送請(qǐng)求 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ā)送請(qǐng)求的請(qǐng)求頭可以加上,偽裝自己是瀏覽器訪問(wèn)。可以通過(guò)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天開(kāi)了個(gè)燈......視頻的cid:499893135 #彈幕所在地 url = "http://comment.bilibili.com/499893135.xml" #發(fā)送請(qǐng)求 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文件的格式,我們需要對(duì)其進(jìn)行處理,來(lái)獲取我們想要的信息。這個(gè)時(shí)候,BeautifulSoup庫(kù)就要閃亮登場(chǎng)了,我們用它來(lái)處理得到的html文件
代碼如下(示例):
#解析 soup = BeautifulSoup(html,'html.parser') #找到html文件里的<d>標(biāo)簽 results = soup.find_all('d') #把標(biāo)簽里的文本提取出來(lái) contents = [x.text for x in results] #存為字典 dic ={"contents" : contents}
contents就是彈幕字符串列表了,存成字典是為了下一步…
3.存儲(chǔ)彈幕
把彈幕信息存儲(chǔ)成excel,也有好多庫(kù)可以用。比如:
- xlwt庫(kù)
- pandas庫(kù)
我們就用pandas庫(kù)把
代碼如下(示例):
把用第二步得到的字典創(chuàng)建dataFrame,然后用pandas庫(kù)的一個(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天開(kāi)了個(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é)
爬蟲(chóng)簡(jiǎn)單來(lái)說(shuō)呢,就三步:
1.發(fā)送網(wǎng)絡(luò)請(qǐng)求,獲取資源
2.進(jìn)行搜索等操作來(lái)獲取有用信息
3.存儲(chǔ)信息
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
在python的類中動(dòng)態(tài)添加屬性與生成對(duì)象
這篇文章給大家介紹了如何在python的類中動(dòng)態(tài)添加屬性和生成對(duì)象,文中通過(guò)幾個(gè)方面來(lái)進(jìn)行介紹,對(duì)這感興趣的朋友們可以學(xué)習(xí)學(xué)習(xí)。2016-09-09python實(shí)現(xiàn)異步回調(diào)機(jī)制代碼分享
本文介紹了python實(shí)現(xiàn)異步回調(diào)機(jī)制的功能,大家參考使用吧2014-01-01關(guān)于python中導(dǎo)入文件到list的問(wèn)題
這篇文章主要介紹了關(guān)于python中導(dǎo)入文件到list的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10云原生Docker部署Django和mysql項(xiàng)目全過(guò)程
最近在學(xué)習(xí)用docker部署Django項(xiàng)目,經(jīng)過(guò)百折不撓的鼓搗,終于將項(xiàng)目部署成功,下面這篇文章主要給大家介紹了關(guān)于云原生Docker部署Django和mysql項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Python實(shí)現(xiàn)提前查詢考研成績(jī)功能
這篇文章主要介紹了Python實(shí)現(xiàn)提前查詢考研成績(jī),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Python無(wú)參裝飾器的實(shí)現(xiàn)方案及優(yōu)化
裝飾器(Decorators)是 Python 的一個(gè)重要部分,所謂裝飾器就是閉包函數(shù)的一種應(yīng)用場(chǎng)景,這篇文章主要給大家介紹了關(guān)于Python無(wú)參裝飾器的相關(guān)資料,需要的朋友可以參考下2021-08-08對(duì)python字典過(guò)濾條件的實(shí)例詳解
今天小編就為大家分享一篇對(duì)python字典過(guò)濾條件的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01