天天看點

爬取bilibili彈幕制作詞雲

最近有部劇的片花看的很燃,正好我又是主演的fans,于是手癢忍不住把該片的彈幕爬取下來做個詞雲玩一玩。

step 1 獲得彈幕的XML檔案

B站上的彈幕在靜态頁面上是沒有的,是以還需要費點勁去找。

打開我們的目标視訊:http://www.bilibili.com/video/av9979006/?from=search&seid=533845265855630872

右鍵源代碼,然後再CTRL+F,輸入”bofqi”然後回車,然後我們找到了如下這個東東:

爬取bilibili彈幕制作詞雲

看到裡面得“cid=16496518&aid=9979006&pre_ad=0”了麼,其中的cid那就是我們要找的彈幕入口,打開http://comment.bilibili.com/16496518.xml ,就可以看到我們的彈幕檔案了

爬取bilibili彈幕制作詞雲

然後就很簡單啦,用request或者urllib都可以請求下來,當然還有更直接的就是右鍵–>頁面另存為。

step 2 清洗文本,分詞和統計詞頻

上一步我們得到了XML格式的檔案,但是呢我們隻要裡面的文字就好了,其他亂七八糟的标簽就可以去掉了,于是使用正規表達式來處理。

import re
f = open("C:\\Users\\Administrator\\Desktop\\chuqiao.txt", "r")  
f2 = open("C:\\Users\\Administrator\\Desktop\\chuqiao2.txt", "w")
count = 
dr = re.compile(r'<[^>]+>',re.S)
while :
    line = f.readline()
    if not line:
        break
    pass
    dd = dr.sub('',line)
    count=count+
    f2.writelines(dd)
print count
           

好的,現在我們得到了幹淨的文本,接下來就是分詞了,使用jieba進行分詞:

def jieba_cut(sentence):          
    seg = jieba.cut(sentence)
    segList = []
    for i in seg:
        segList.append((i)) 
    return segList
           

再然後,使用nltk對分好的詞進行詞頻統計,當然,自己也能寫一個代碼統計,部落客懶,就直接拿來主義了,一行代碼搞定:

step 3 制作詞雲

這一步呢,咱們使用的包是wordcloud,在使用這個包之前,請先下載下傳好一個中文字型,部落客随手使用的字型是DroidSansFallbackFull.ttf,然後呢,搞個自己的定制邊緣,使用的背景圖是自己二次加工的片方圖,ps能力有限,看看就好:

爬取bilibili彈幕制作詞雲

不放代碼的部落客不是好部落客:

font = os.path.join(dir, "DroidSansFallbackFull.ttf")
# 設定背景圖檔
chuqiao_coloring = imread(os.path.join(os.path.dirname(__file__), "chuqiao.png"))
# 從背景圖檔生成顔色值
image_colors = ImageColorGenerator(chuqiao_coloring)
wordCloud = WordCloud(background_color="white",mask = chuqiao_coloring,font_path=font).generate_from_frequencies(frequency)
plt.imshow(wordCloud.recolor(color_func=image_colors))
# plt.axis("off")
wordCloud.to_file(os.path.join(dir, "chuqiaoDanMU.png"))
           

接下來,激動人心得時候到了,我家楚大人的詞雲躍然屏上:

爬取bilibili彈幕制作詞雲

最後,請秀麗王帶我回家,謝謝,轉載請告之。

爬取bilibili彈幕制作詞雲

繼續閱讀