川普作为一个推特狂人,上台以来一共发了一万多条推特,本文爬取了川普在2020年的全部推特内容并将其绘制成了词云图。
selenium:抓取动态网页
bs4:解析网页
nltk:分词和统计词频
wordcloud:绘制词云
imageio:读取图片
程序文件:后台回复 川普 获取。
整个流程很简单,首先使用selenium+bs4获取网页信息,然后使用nltk对文本分词并去除标点符号和停用词,最后可视化得到的数据,这里我使用wordcloud绘制了一个词云。
获取网页信息这部分就不赘述了,在之前的文章里介绍过很多次了,之所以选择selenium这个速度不是很快的工具是因为我不太懂js方面的知识,为了尽可能降低学习成本,所以我选择了selenium。
可以参考之前的这篇文章 到底应该怎么给女朋友选口红色号?
唯一需要注意的是推特的网页是一个下拉加载的动态网页,爬取这个网页需要每隔几秒将网页下拉加载更多。实现方法也很简单。
然后使用nltk库去除文本中的停用词和标点符号。nltk库提供了英语的停用词,可以通过stop = stopwords.words('english')
加载停用词。
得到停用词列表后,通过循环去除文本中的停用词。
此时文本中还有大量的标点符号,所以还需要去掉文本中的标点符号。
words=[word.lower() for word in words if word.isalpha()]
去除掉无用信息后就可以统计一下文本中的词频了,nltk库已经帮你实现了这一功能。
freq_word = nltk.FreqDist(words)
最后,因为wordcloud绘制词云时传入的是一个字典,所以需要将获得的词频数据写入一个字典。
得到了文本中的词频数据后,就可以开始进行可视化了,因为我想做成一个有形状的词云,所以我选择了wordcloud库而没有选择pyecharts库。
使用wordcloud库生成一个词云只需要两行代码,第一行导入轮廓图片,第二行使用WordCloud()生成即可。
最后保存生成的词云图
wc.to_file('Trump.png')
如果觉得本文还可以,还请各位点个在看。