Python爬取豆瓣《复仇者联盟3》影评并分析案例

  • A+
所属分类:网络爬虫
摘要

执行程序,成功得爬取到了影评,并生成了一个文字云图,用树人格鲁特来做背景

利用Python开发一个爬虫爬取豆瓣上的电影评论并分析并不复杂,此前也已经开发了一些类似案例,参考此前写的一些Python爬虫和数据分析的文章。

昨天晚上带着儿子去万达影城看了《复仇者联盟3》,果然不愧是漫威的第19部电影,十年集大成之作,特效惊人,在电影院看IMAX效果amazing!散场的时候已经11点多了。今天早上问儿子看完电影之后有什么观后感,他说了一句“I am Groot”简直乐死人了!跟我我一样,看完电影之后印象最深刻的不是一身BOSS气的灭霸,不是很爷们的雷神,不是创造力惊人的钢铁侠,也不是一身正气的美队,更不是看起来很像福尔摩斯的奇异博士,反而是树人格鲁特。

由此,想知道其他人对这个电影的观感,写了一个Python爬虫来爬取豆瓣上对于这部电影的影评,然后做一下分析制作一个文字云看看。

程序简单,分为两段,一段爬影评,一段分析影评并制作文字云。

 

  1. import random
  2. import time
  3. import requests
  4. import jieba
  5. import codecs
  6. import matplotlib.pyplot as plt
  7. from wordcloud import WordCloud,ImageColorGenerator
  8. from scipy.misc import imread
  9. from bs4 import BeautifulSoup
  10. def getHtml(url):
  11.     try:
  12.         r=requests.get(url,timeout=30)
  13.         r.raise_for_status()
  14.         return r.text
  15.     except:
  16.         return ''
  17. def getComment(html):
  18.     soup = BeautifulSoup(html, 'html.parser')
  19.     comments_list = []
  20.     comment_nodes = soup.select('.comment > p')
  21.     for node in comment_nodes:
  22.         comments_list.append(node.get_text().strip().replace("\n", "") + u'\n')
  23.     return comments_list
  24. def saveCommentText(fpath):
  25.     pre_url ="https://movie.douban.com/subject/24773958/comments?"
  26.     depth = 8
  27.     with open(fpath, 'a', encoding='utf-8') as f:
  28.         for i in range(depth):
  29.             url = pre_url+'start=' + str(20 * i) + '&limit=20&sort=new_score&' +'status=P'
  30.             html = getHtml(url)
  31.             f.writelines(getComment(html))
  32.             time.sleep(1 + float(random.randint(1, 20)) / 20)
  33. def cutWords(fpath):
  34.     text = ''
  35.     with open(fpath,'r', encoding='utf-8') as fin:
  36.         for line in fin.readlines():
  37.               line = line.strip('\n')
  38.               text += ' '.join(jieba.cut(line))
  39.               text += ' '
  40.     with codecs.open('text.txt', 'a', encoding='utf-8') as f:
  41.         f.write(text)
  42. def drawWordcloud():
  43.     with codecs.open('text.txt',encoding='utf-8') as f:
  44.         comment_text = f.read()
  45.     color_mask = imread("pic.png")
  46.     Stopwords = [u'就是', u'电影', u'你们', u'这么', u'不过', u'但是',
  47.                           u'除了', u'时候', u'已经', u'可以', u'只是', u'还是', u'只有', u'不要', u'觉得',u','u'。']
  48.     cloud = WordCloud(font_path="simhei.ttf",
  49.                       background_color='white',
  50.                       max_words=200,
  51.                       max_font_size=200,
  52.                       min_font_size=4,
  53.                       mask=color_mask,
  54.                       stopwords=Stopwords)
  55.     word_cloud = cloud.generate(comment_text)
  56.     image_colors = ImageColorGenerator(color_mask)
  57.     plt.imshow(cloud)
  58.     plt.axis("off")
  59.     plt.figure()
  60.     plt.imshow(cloud.recolor(color_func=image_colors))
  61.     plt.axis("off")
  62.     plt.figure()
  63.     plt.imshow(color_mask, cmap=plt.cm.gray)
  64.     plt.axis("off")
  65.     plt.show()
  66.     word_cloud.to_file("comment_cloud.jpg")
  67. def main():
  68.     fpath = 'comment.txt'
  69.     saveCommentText(fpath)
  70.     cutWords(fpath)
  71.     drawWordcloud()
  72. main()

 

来源:韩思工作室(微信ID:hanshiqiang365)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: