今天下午一个朋友带我儿子去健身了,我和老婆有了一些时间可以做自己想做的事情,做什么呢?到万达影院IMAX看电影去!最近上映了一部美国环球影业公司出品的科幻冒险电影《侏罗纪世界2》,看了两个小时,感觉不坏,回来上豆瓣看了下影评,就随手写了个Python程序来爬取豆瓣影评并统计分析,然后以观看这部电影时印象最深刻的“撞撞龙”(这头龙在电影里撞来撞去,是一头抢镜的恐龙,不甘被囚禁在古堡里,帮助主角脱险,并大闹恐龙拍卖会的会场,老婆大人问我这是什么龙,这我哪儿知道啊,就随口给它取了一个撞撞龙的名字,其实学名冥河龙,生活于白垩纪晚期,全长约2.4米,高约1米,体型和习性都很像山羊,命名源于美国蒙大拿州的地狱溪)为背景做了一个词云来显示影评统计和分析结果——因为此前有类似程序,前后只用了不少10分钟时间就搞定了。
写这个代码,第一步就是分析豆瓣页面,然后写爬虫把影评信息爬取下来存储到一个本地文件comment.txt里来,然后利用jieba类库对爬取下来的影评进行分析并统计分析,最后利用词云将分析结果显示出来。
逻辑清晰没毛病,直接上代码:
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/26416062/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'什么']
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.figure()
plt.axis("off")
plt.show()
word_cloud.to_file("comment_cloud.jpg")
def main():
fpath = 'comment.txt'
saveCommentText(fpath)
cutWords(fpath)
drawWordcloud()
main()
程序运行结束,生成了下面这个以全场最佳抢镜“撞撞龙”为背景的词云:
从词云结果很直观就能看出,这部电影的主题是讲“人类”和“恐龙”,特效惊人,电影中登场的小女孩很可能是一个关键人物,伏笔满满,未来有无数种可能。最后放走恐龙的不是本来以为是圣母的女主角,而是这个身为克隆人的小女孩,并且那个反派一直在强调这个小女孩很重要,到底为什么那么重要呢?除了她是克隆人之外,在她身上是否还有其他更惊悚的秘密?细思极恐!如果在续集里这个名为梅茜的小女孩变身成了一只恐龙女王统治世界,我一点都不会惊讶。
领取专属 10元无门槛券
私享最新 技术干货