从《流浪星球》1000条评论中看看这部电影到底咋样

  • 2019 年 10 月 6 日
  • 筆記

在豆瓣上有很多关于《流浪星球》的评论,评论太多了,那么到底这部电影怎么样呢?Python可以给出我们答案,这就需要用到Python的词云了。

什么是词云?词云又叫文字云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思。

首先我们需要准备的python库包括:requests,BeautifulSoup,jieba,matplotlib,wordcloud和imageio,可以通过pip install —-进行安装。其中jieba用于分词;matplotlib基础的画图库;wordcloud用于生成词云对象;imageio用于读取背景图片。

接下来进行代码实现:

获取评论。每页评论有20条,通过修改url中的start参数可以实现查看不同页面评论,同时每部电影在豆瓣中都有对应的id,因此将《流浪星球》的id值与需要抓取的页面开始值放入到comment(id,i)中即可获取当前页面评论,并返回评论数据。

def comment(id,i):     result = []     inres = requests.get('https://movie.douban.com/subject/{}/comments?start={}&limit=20&sort=new_score&status=P'.format(id,i),headers = headers)     insoup = BeautifulSoup(inres.text,'html.parser')     for comment in insoup.select('.comment-item'):         result.append(comment.select('p')[0].text)     return result

将评论存入text变量。range(0,1001,20)函数中从0到1001,以20个数分割,以实现抓取不同页面评论的效果,最终将抓取1000条评论。同时《流浪星球》的id通过访问网页url中可以知道为26266893,最终评论数据将被去除换行后以字符型传入text中。

import jieba  import requests  from imageio import imread  from bs4 import BeautifulSoup  import matplotlib.pyplot as plt  from wordcloud import WordCloud  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}pools = []  for j in range(0,1001,20):     pools.append(comment(26266893,j))  text = str(pools).replace('\n','')

这里放张图片,看看一千条评论有多少内容,总共32479个字。

将中文剪切后存入变量wl中。这里删除掉了一些无关紧要的词,通过jieba库将中文剪切后存入到wl变量中。

texts = text.replace('还是','').replace('就是','').replace('没有','').replace('不是','').replace('一个','').replace('电影','')  wordlist = jieba.cut(texts,cut_all=True)  wl = " ".join(wordlist)

生成词云图。宽高设置为1600×800,最大字体尺寸为300,最小字体尺寸为30,背景颜色为黑色,最大词数为wl变量的长度也就是全部评论,字体路径设置为本机黑体路径。

wc = WordCloud(width=1600,height=800,max_font_size=300,min_font_size=30,background_color = 'black',max_words = len(wl),font_path = 'C:WindowsFontssimhei.ttf')  myword = wc.generate(wl)  plt.imshow(myword)  plt.axis("off")  plt.show()

不过这样显得有些单调,因此我们将背景设置为图片,不过最后感觉图片分辨率太低了,因此借助plt.figure(figsize=(20,10)) 和plt.tight_layout(pad=0) 语句提高了图片分辨率,其分辨率的调整可以参考:https://stackoverrun.com/cn/q/7908092

jpg = imread(r'C:UsersAdministratorDesktopllxq_4.0x.png')  wc = WordCloud(mask = jpg,background_color = 'white',max_words = len(wl),font_path = 'C:WindowsFontssimhei.ttf')  myword = wc.generate(wl)  plt.figure(figsize=(20,10))  plt.imshow(myword)  plt.tight_layout(pad=0)  plt.axis("off")  plt.show()

通过上面两张词云来看,在一千条评论中,中国、科幻、可以、特效等关键词出现的最多,很明显大家对于这部电影都还是很支持的,作为中国科幻迷,也是感到很自豪,哈哈。