網(wǎng)上沖浪”“886”“GG”“沙發(fā)”……如果你用過這些立叛,那你可能是7080后;
“杯具”“神馬”“浮云”“偷菜”……如果你用過這些贡茅,你可能是8090后秘蛇;
“吃瓜群眾”“一億小目標”“藍瘦,香菇”“主要看氣質(zhì)”……如果你用過這些顶考,你可能是9000后赁还;
“awsl”“逮蝦戶”“律師函警告”“挖藕”……如果你了解這些,你可能……
是混b站的吧驹沿!
大家好艘策,我是大鵬,一位勉強通過b站會員考試的普通會員渊季。
眾所周知,b站彈幕是流行用語爆發(fā)的天堂,如果有一天你發(fā)現(xiàn)公司群里95免都、00后說話都聽不懂了食侮,來b站看看彈幕是很好的補習方式『仙埃可問題是青扔,這么多視頻這么多彈幕該從何看起呢?
數(shù)據(jù)分析師要有數(shù)據(jù)分析師的亞子,今天我就教大家用Python零基礎(chǔ)來爬一爬這個小破站的彈幕微猖,快速學習一些流行用語(完整python教程+代碼會在文末放出)谈息。
1.彈幕哪里找?
平常我們在看視頻時凛剥,彈幕是出現(xiàn)在視頻上的黎茎。實際上在網(wǎng)頁中,彈幕是被隱藏在源代碼中当悔,以XML的數(shù)據(jù)格式進行加載的:
XML和JSON傅瞻、YAML一樣是一種通用的標記信息表達方式,可以簡單的理解為一種記錄數(shù)據(jù)的格式盲憎。XML和描述網(wǎng)頁的語言HTML非常像嗅骄,所以你會在截圖中看到<d></d>這樣的標簽。了解更多可以查看教程:https://www.runoob.com/xml/xml-intro.html
那么上圖這個彈幕文件的url是什么呢饼疙?
https://comment.bilibili.com/92542241.xml
它以一個固定的url地址+視頻的cid+.xml組成溺森。只要找到你想要的視頻cid,替換這個url就可以爬取所有彈幕了(b站大部分網(wǎng)頁給出的字幕限制是1000條)窑眯。
一個視頻的cid在哪里呢屏积?右鍵網(wǎng)頁,打開網(wǎng)頁源代碼磅甩,搜索cid”就能找到:
cid在網(wǎng)頁源碼中是一個很常見的詞組炊林,而我們要尋找的正確的cid都會寫成"cid":xxxxxxxx的形式。為了縮小搜索范圍卷要,在后方加上一個引號會更快搜索到渣聚。
有了正確的cid,拼好url僧叉,我們就來寫爬蟲吧奕枝!
2.爬蟲庫到底是什么?
基本所有初學Python爬蟲的人都會接觸到requests瓶堕、BeautifulSoup這兩個工具庫隘道,這是兩個常用基礎(chǔ)庫。requests用于向網(wǎng)站url發(fā)起請求郎笆,以獲取網(wǎng)頁代碼谭梗;BeautifulSoup用于將HTML/XML內(nèi)容解析,并提取里面的重要信息题画。
這兩個庫模擬了人訪問網(wǎng)頁默辨,讀懂網(wǎng)頁并復制粘貼出對應信息的過程,能夠批量地苍息、快速地完成數(shù)據(jù)爬取缩幸。
如果你在學習Python的過程當中有遇見任何問題壹置,可以加入我的python交流學企鵝群:【611+530+101】,多多交流問題表谊,互幫互助钞护,群里有不錯的學習教程和開發(fā)工具。學習python有任何問題(學習方法爆办,學習效率难咕,如何就業(yè)),可以隨時來咨詢我
3.開始爬取
觀察網(wǎng)頁距辆,可以發(fā)現(xiàn)余佃,所有的彈幕都放在了<d>標簽下,那么我們需要構(gòu)建一個程序獲取所有的<d>標簽:
第一步跨算,導入requests庫爆土,使用request.get方法訪問彈幕url:
import requests
#獲取頁面數(shù)據(jù)html
url=r'https://comment.bilibili.com/78830153.xml'
r=requests.get(url)#訪問url
r.encoding='utf8'
第二步,導入BeautifulSoup庫诸蚕,使用lxml解析器解析頁面:
from bs4 import BeautifulSoup
#解析頁面
soup=BeautifulSoup(r.text,'lxml')#lxml是常用的解析器步势,需要提前使用pip工具安裝lxml庫
d=soup.find_all('d')#找到所有頁面的d標簽
#print(d)
這樣操作后,所有藏在d標簽里的彈幕內(nèi)容就被python抓取到了 :
解析完成后背犯,接下來第三步就是運用Python基礎(chǔ)函數(shù)中的for函數(shù)坏瘩,將單條數(shù)據(jù)裝進字典,再將所有字典裝進一個列表:
#解析彈幕,將彈幕漠魏、網(wǎng)址倔矾、時間整理為字典,最后加和成列表蛉幸,共1000條數(shù)據(jù)
dlst=[]
n=0
for i in d:
n+=1
danmuku={}#將單條數(shù)據(jù)裝進字典
danmuku['彈幕']=i.text
danmuku['網(wǎng)址']=url
danmuku['時間']=datetime.date.today()#需要先導入datetime庫
dlst.append(danmuku)#將所有字典裝進一個列表
print('獲取了%i條數(shù)據(jù)' %n)
#print(dlst)
此時整理好的彈幕數(shù)據(jù)如下破讨,是不是已經(jīng)有點常見的excel數(shù)據(jù)的意思了?
那我們就把它變得更加像excel數(shù)據(jù)吧奕纫!第四步導入大名鼎鼎的pandas庫,一行代碼將列表數(shù)據(jù)轉(zhuǎn)為DataFrame數(shù)據(jù)烫沙,并保存到本地匹层,爬蟲的大體框架就完成了:
import pandas as pd
#將列表變?yōu)镈ataFrame,使用pandas進行分析
df=pd.DataFrame(dlst)
df.to_excel('b站彈幕數(shù)據(jù).xlsx')#講爬下來的數(shù)據(jù)放在excel里
3.多個彈幕網(wǎng)址怎么爬?
沒錯锌蓄,這個爬蟲還存在很多可以優(yōu)化的地方升筏,比如是不是可以爬取多個彈幕?是不是可以封裝起來瘸爽,輸入cid就出來結(jié)果呢您访?
當然可以。只要我們熟練掌握def定義函數(shù)功能剪决,就可以把上述的爬蟲功能寫成一個爬取函數(shù):
一鍵爬取一時爽灵汪,一直一鍵一直爽檀训,完整代碼就在文末,大家自己爽吧享言。
4.彈幕可以做什么分析?
鬼畜區(qū)出來的流行詞永遠是最有腦洞的峻凫,所以本文以最近很鬼畜的“巴啦啦小魔仙口胡”視頻彈幕為例,教授流行用語:
首先看看览露,發(fā)彈幕的小伙伴有多少是話癆呢荧琼?
雖然大部分的彈幕都在10個字內(nèi)解決,但平均來看大家會使用9.8個左右的字表達吐槽差牛,最長的一位同學彈幕字數(shù)長達100字命锄。10個字在平時說話可能就是一個短句,但是放在彈幕上已經(jīng)是很長的一串了偏化,看來刷彈的話癆還是很多的累舷。
那么這些話癆都在說什么呢?
字數(shù)最多的前二十位同學就是在笑夹孔,沉浸式的大笑被盈,果然人類的本質(zhì)就是復讀機:
既然說到復讀機,除了哈哈哈以外搭伤,還有哪些詞是經(jīng)常被復讀的呢只怎?
“合影”“亞子”“雨女無瓜”“名場面”……不得不說這個小破站的網(wǎng)友腦洞清奇。有了這個怜俐,媽媽再也不愁我跟不上00后的步伐了身堡。
我知道,你一定想問拍鲤,零基礎(chǔ)真的能快速學會Python技巧贴谎,做一些好玩的事情嗎?