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

释放双眼,带上耳机,听听看~!
执行程序,成功得爬取到了影评,并生成了一个文字云图,用树人格鲁特来做背景

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

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

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

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

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.imshow(color_mask, cmap=plt.cm.gray)

plt.axis("off")

plt.show()

word_cloud.to_file("comment_cloud.jpg")

def main():

fpath = 'comment.txt'

saveCommentText(fpath)

cutWords(fpath)

drawWordcloud()

main()

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

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧