爬取bilibili彈幕製作詞雲
最近有部劇的片花看的很燃,正好我又是主演的fans,於是手癢忍不住把該片的彈幕爬取下來做個詞雲玩一玩。
step 1 獲得彈幕的XML文件
B站上的彈幕在靜態頁面上是沒有的,所以還需要費點勁去找。打開我們的目標視頻:【特工皇妃楚喬傳】2分鐘先導片花 趙麗穎戰魂覺醒燃燃燃
右鍵源代碼,然後再CTRL+F,輸入」bofqi」然後回車,然後我們找到了如下這個東東:看到裡面得「cid=16496518&aid=9979006&pre_ad=0」了么,其中的cid那就是我們要找的彈幕入口,打開http://comment.bilibili.com/16496518.xml ,就可以看到我們的彈幕文件了
然後就很簡單啦,用request或者urllib都可以請求下來,當然還有更直接的就是右鍵–>頁面另存為。
step 2 清洗文本,分詞和統計詞頻
上一步我們得到了XML格式的文件,但是呢我們只要裡面的文字就好了,其他亂七八糟的標籤就可以去掉了,於是使用正則表達式來處理。import ref = open("C:\Users\Administrator\Desktop\chuqiao.txt", "r") f2 = open("C:\Users\Administrator\Desktop\chuqiao2.txt", "w")count = 0dr = re.compile(r<[^>]+>,re.S)while 1: line = f.readline() if not line: break pass dd = dr.sub(,line) count=count+1 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對分好的詞進行詞頻統計,當然,自己也能寫一個代碼統計,博主懶,就直接拿來主義了,一行代碼搞定:
frequency = nltk.FreqDist(sentence)
step 3 製作詞雲
這一步呢,咱們使用的包是wordcloud,在使用這個包之前,請先下載好一個中文字體,博主隨手使用的字體是DroidSansFallbackFull.ttf,然後呢,搞個自己的定製邊緣,使用的背景圖是自己二次加工的片方圖,ps能力有限,看看就好:不放代碼的博主不是好博主:
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"))
接下來,激動人心得時候到了,我家楚大人的詞雲躍然屏上:
最後,請秀麗王帶我回家。原CSDN地址:爬取bilibili彈幕製作詞雲 - <p>專註挖坑</p> - 博客頻道 - CSDN.NET
推薦閱讀:
※NLP 自然語言處理國際會議(轉)
※NNLM最新論文調研-1-《Character-Aware Neural Language Models》
※我為什麼從技術角度不看好中國的智能音箱
※周明:如果用一個詞形容NLP圈的2017,我選「想像」| 人物對話