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

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

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

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

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

#author:hanshiqiang365

import random

import time

import requests

import jieba

import codecs

import matplotlib.pyplot as plt

from wordcloud import WordCloud,ImageColorGenerator

from scipy.misc import imread

from bs4 import BeautifulSoup

def getHtml(url):

try:

r=requests.get(url,timeout=30)

r.raise_for_status()

return r.text

except:

return ''

def getComment(html):

soup = BeautifulSoup(html, 'html.parser')

comments_list = []

comment_nodes = soup.select('.comment > p')

for node in comment_nodes:

comments_list.append(node.get_text().strip().replace("\n", "") + u'\n')

return comments_list

def saveCommentText(fpath):

pre_url ="https://movie.douban.com/subject/24773958/comments?"

depth = 8

with open(fpath, 'a', encoding='utf-8') as f:

for i in range(depth):

url = pre_url+'start=' + str(20 * i) + '&limit=20&sort=new_score&' +'status=P'

html = getHtml(url)

f.writelines(getComment(html))

time.sleep(1 + float(random.randint(1, 20)) / 20)

def cutWords(fpath):

text = ''

with open(fpath,'r', encoding='utf-8') as fin:

for line in fin.readlines():

line = line.strip('\n')

text += ' '.join(jieba.cut(line))

text += ' '

with codecs.open('text.txt', 'a', encoding='utf-8') as f:

f.write(text)

def drawWordcloud():

with codecs.open('text.txt',encoding='utf-8') as f:

comment_text = f.read()

color_mask = imread("pic.png")

Stopwords = [u'就是', u'电影', u'你们', u'这么', u'不过', u'但是',

u'除了', u'时候', u'已经', u'可以', u'只是', u'还是', u'只有', u'不要', u'觉得',u','u'。']

cloud = WordCloud(font_path="simhei.ttf",

background_color='white',

max_words=200,

max_font_size=200,

min_font_size=4,

mask=color_mask,

stopwords=Stopwords)

word_cloud = cloud.generate(comment_text)

image_colors = ImageColorGenerator(color_mask)

plt.imshow(cloud)

plt.axis("off")

plt.figure()

plt.imshow(cloud.recolor(color_func=image_colors))

plt.axis("off")

plt.figure()

plt.axis("off")

plt.show()

word_cloud.to_file("comment_cloud.jpg")

def main():

fpath = 'comment.txt'

saveCommentText(fpath)

cutWords(fpath)

drawWordcloud()

main()

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

从文字云图上很容易看出,这部电影就是灭霸一个人的电影,抢劫6颗宝石,实现他平衡大宇宙的理念,且不说这个理念是否三观正确,他的执行力果然非同一般,在这部电影的结局他成功了,集齐了6颗宝石,一个响指毁灭了半个宇宙的生命!顺带干掉了一大堆漫威英雄。果然是超级大反派!

漫威电影想象力和创造力惊人,出人意料,期待《复仇者联盟4》!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180514G092WT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券