爬取bilibili弹幕制作词云

最近有部剧的片花看的很燃,正好我又是主演的fans,于是手痒忍不住把该片的弹幕爬取下来做个词云玩一玩。

step 1 获得弹幕的XML文件
B站上的弹幕在静态页面上是没有的,所以还需要费点劲去找。
打开我们的目标视频:http://www.bilibili.com/video/av9979006/?from=search&seid=533845265855630872
右键源代码,然后再CTRL+F,输入”bofqi”然后回车,然后我们找到了如下这个东东:
爬取bilibili弹幕制作词云_第1张图片

看到里面得“cid=16496518&aid=9979006&pre_ad=0”了么,其中的cid那就是我们要找的弹幕入口,打开http://comment.bilibili.com/16496518.xml ,就可以看到我们的弹幕文件了
爬取bilibili弹幕制作词云_第2张图片

然后就很简单啦,用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 = 0
dr = 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能力有限,看看就好:
爬取bilibili弹幕制作词云_第3张图片

不放代码的博主不是好博主:

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弹幕制作词云_第4张图片

最后,请秀丽王带我回家,谢谢,转载请告之。
这里写图片描述

你可能感兴趣的:(NLP)