爬蟲數據雲詞圖片怎麼做?小姐姐教你用python做B站彈幕爬蟲,並進行數據分析生成詞雲

hello大家好,我是你們的可愛丸,大家平時在B站看視頻時有沒有開彈幕的習慣呢?如果不把視頻從頭看到尾,那麼多彈幕,我們怎麼快速的知道大家都說了些什麼並且持有什麼觀點呢?
在這裏插入圖片描述
今天小姐姐就教你做一個簡單的B站彈幕爬蟲,讓你在沒有觀看視頻的情況下就能預先知道大家都在彈幕裏面評論了什麼,並且什麼是大家說的最多的詞語。話不多說,現在我們就開始學習B站彈幕的python爬蟲吧!
【效果預覽】
在這裏插入圖片描述
在這裏插入圖片描述
【詳細教程】
首先,我們需要確定想爬取的目標網頁,因爲最近羅翔老師說刑法的相關視頻實在是太有意思了,所以這裏可愛丸小姐姐選取了羅翔老師的最新視頻:【羅翔】我們爲什麼要讀書?進行彈幕分析,網址如下:https://www.bilibili.com/video/BV1BK411L7DJ
在這裏插入圖片描述
確定了要爬取的URL之後,我們需要點擊右鍵進入檢查模式,然後找到Network選項卡,再點擊瀏覽器左上角的刷新按鈕,接着一個個點擊瀏覽左下角的數據查找彈幕信息存儲的位置。經過一番查找,小姐姐發現彈幕信息原來儲存在:list.so?oid=177974677這個位置。
在這裏插入圖片描述
接下來我們將list.so?oid=177974677這個數據點開,就可以看到如下的信息,原來我們所有的彈幕信息都存儲在這個網頁中,那麼我們的要分析的URL地址就是:https://api.bilibili.com/x/v1/dm/list.so?oid=177974677啦。
在這裏插入圖片描述
接着我們編寫如下代碼並運行,就可以成功的將彈幕信息爬下來啦,是不是很簡單呢?

#導入我們要用到的模塊
import requests
import re

#設置想要爬取的網頁地址
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677'
#設置請求頭,讓爬蟲僞裝成瀏覽器訪問
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}

def get_damu(url):
    response = requests.get(url, headers)
    response = response.content.decode('utf-8')
    #通過正則表達式獲取兩個<d>標籤內包含的彈幕信息
    data = re.compile('<d.*?>(.*?)</d>')
    #對目標網頁使用正則表達式,獲取所有匹配的內容
    danmu = data.findall(response)
    #打印一下看看有沒有成功獲取到彈幕
    print(danmu)

get_damu(url)

在這裏插入圖片描述
但是想要對彈幕進行數據分析還沒有那麼簡單哦,我們需要對彈幕進行分詞,也就是把句子分割爲一個個詞語,然後再用空格將每個詞語連接起來,需要補充的代碼如下:

danmu_word = jieba.lcut(" ".join(danmu))
#將分詞結果再次用空格連接,並轉化成製作詞雲需要的字符串形式
print(danmu_word)

在這裏插入圖片描述
雖然我們已經做好了分詞處理,但是詞雲只能處理字符串形式的內容,所以這裏我們需要再將處理好的分詞轉化爲字符串形式,需要補充的代碼如下:

#將分詞結果再次用空格連接,並轉化成製作詞雲需要的字符串形式
danmu_str = " ".join(danmu_word)
print(danmu_str)

在這裏插入圖片描述
彈幕數據處理成可以被詞雲使用的字符串數據之後,我們就可以使用詞雲模塊對數據進行詞雲分析啦,代碼如下:

# 微信公衆號:chimuyhs 【可愛丸學python】 關注並回復:源碼  即可獲取源代碼
# QQ學習交流羣:983460742

#導入我們要用到的模塊
import requests
import re
import jieba
import wordcloud
#設置想要爬取的網頁地址
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677'
#設置請求頭,讓爬蟲僞裝成瀏覽器訪問
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}

def get_damu(url):
    response = requests.get(url, headers)
    response = response.content.decode('utf-8')
    #通過正則表達式獲取兩個<d>標籤內包含的彈幕信息
    data = re.compile('<d.*?>(.*?)</d>')
    #對目標網頁使用正則表達式,獲取所有匹配的內容
    danmu = data.findall(response)
    #使用jieba模塊的lcut()精確模式進行分詞,並用空格連接詞語
    danmu_word = jieba.lcut(" ".join(danmu))
    #將分詞結果再次用空格連接,並轉化成製作詞雲需要的字符串形式
    danmu_str = " ".join(danmu_word)
    #構造詞雲對象,字體爲微軟雅黑,背景顏色爲白色
    w = wordcloud.WordCloud(font_path="msyh.ttc",background_color='white')
    #將處理好的分詞彈幕加載到詞雲中
    w.generate(danmu_str)
    #將生成的詞雲保存爲danmu.png圖片
    w.to_file('danmu.png')

if __name__ == '__main__':
    get_damu(url)

做好以上的處理之後,我們的詞雲圖片就存儲在和源代碼同級的文件夾下啦,其中詞語最大的就是在彈幕中出現次數最多的詞語哦,從這個彈幕詞雲我們可以看出同學們說的最多的就是“謝謝老師”,看來我們的羅翔老師真的很受大家喜愛呢,給羅翔老師點贊!
在這裏插入圖片描述
如果大家覺得系統默認生成的詞雲圖片太小的話,還可以對詞雲圖片的長和寬進行設置哦,這樣我們就可以得到自己想要的圖片大小啦,設置方法如下:

#構造詞雲對象,字體爲微軟雅黑,背景顏色爲白色
#設置寬度爲1000高度爲500,通過mask設置圖片形狀
w = wordcloud.WordCloud(font_path="msyh.ttc",background_color='white',width=1000,height=500)

在這裏插入圖片描述
如果你想生成更具特色的詞雲,還可以對詞雲的形狀進行設置哦,這裏可愛丸小姐姐想把詞雲設置成五角星的形狀,所以就在網上找了一張五角星的圖片,並通過修改mask,把五角星圖片設置爲詞雲的形狀,代碼如下:

# 微信公衆號:chimuyhs 【可愛丸學python】 關注並回復:源碼  即可獲取源代碼
# QQ學習交流羣:983460742

#導入我們要用到的模塊
import requests
import re
import jieba
import wordcloud
import imageio
#選擇同一個文件夾下的luoxiang.jpg圖片
mask = imageio.imread('xing.jpg')

#設置想要爬取的網頁地址
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677'
#設置請求頭,讓爬蟲僞裝成瀏覽器訪問
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}

def get_damu(url):
    response = requests.get(url, headers)
    response = response.content.decode('utf-8')
    #通過正則表達式獲取兩個<d>標籤內包含的彈幕信息
    data = re.compile('<d.*?>(.*?)</d>')
    #對目標網頁使用正則表達式,獲取所有匹配的內容
    danmu = data.findall(response)
    #使用jieba模塊的lcut()精確模式進行分詞,並用空格連接詞語
    danmu_word = jieba.lcut(" ".join(danmu))
    #將分詞結果再次用空格連接,並轉化成製作詞雲需要的字符串形式
    danmu_str = " ".join(danmu_word)
    #構造詞雲對象,字體爲微軟雅黑,背景顏色爲白色
    #設置寬度爲1000高度爲500,通過mask設置圖片形狀
    w = wordcloud.WordCloud(font_path="msyh.ttc",background_color='white',width=1000,height=500,mask=mask)
    #將處理好的分詞彈幕加載到詞雲中
    w.generate(danmu_str)
    #將生成的詞雲保存爲danmu.png圖片
    w.to_file('danmu.png')

if __name__ == '__main__':
    get_damu(url)

在這裏插入圖片描述
怎麼樣,這樣生成的詞雲是不是“美貌與智慧”並存呢?哈哈。

看到這裏大家是不是以爲本期的教程就要結束了呢?纔沒有呢!我們還差了最後一步哦。大家有沒有發現,這樣寫的爬蟲只能爬取設置好的默認視頻彈幕,如果下次我們想要分析另一個視頻的彈幕豈不是要把代碼重新寫一遍?這可不是我們聰明人的風格哦。所以我們要對這個爬蟲增加一個可交互的功能,讓他能夠爬取任意我們想要爬取的B站視頻,並且不用修改代碼,方法如下:

# 微信公衆號:chimuyhs 【可愛丸學python】 關注並回復:源碼  即可獲取源代碼
# QQ學習交流羣:983460742

#導入我們要用到的模塊
import requests
import re
import jieba
import wordcloud
import imageio
#選擇同一個文件夾下的luoxiang.jpg圖片
mask = imageio.imread('xing.jpg')

#設置想要爬取的網頁地址
url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677'
#設置請求頭,讓爬蟲僞裝成瀏覽器訪問
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}

def get_damu(url):
    response = requests.get(url, headers)
    response = response.content.decode('utf-8')
    #通過正則表達式獲取兩個<d>標籤內包含的彈幕信息
    data = re.compile('<d.*?>(.*?)</d>')
    #對目標網頁使用正則表達式,獲取所有匹配的內容
    danmu = data.findall(response)
    #使用jieba模塊的lcut()精確模式進行分詞,並用空格連接詞語
    danmu_word = jieba.lcut(" ".join(danmu))
    #將分詞結果再次用空格連接,並轉化成製作詞雲需要的字符串形式
    danmu_str = " ".join(danmu_word)
    #構造詞雲對象,字體爲微軟雅黑,背景顏色爲白色
    #設置寬度爲1000高度爲500,通過mask設置圖片形狀
    w = wordcloud.WordCloud(font_path="msyh.ttc",background_color='white',width=1000,height=500,mask=mask)
    #將處理好的分詞彈幕加載到詞雲中
    w.generate(danmu_str)
    #將生成的詞雲保存爲danmu.png圖片
    w.to_file('danmu.png')

if __name__ == '__main__':
    s = input("輸入要爬取的彈幕地址:")
    # 將用戶輸入的彈幕地址去掉空格並加載到get_danmu()中
    get_damu(s.strip())

將代碼改進之後,我們就可以實現對任意視頻的B站彈幕分析啦!是不是很棒呢?
在這裏插入圖片描述
好啦,本次的爬蟲案例分享到這裏就結束啦,如果你還想學習更多有關python的知識,記得關注我哦,我將持續與大家分享python自學之路上的學習乾貨!

如果你覺得本教程寫得不錯的話,記得給小姐姐評論以及點贊哦,你們的支持就是我堅持的動力!拜拜,我們下期再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章