代码地址如下:
http://www.demodashi.com/demo/13257.html

1. 需求说明

本项目基于Python爬虫,爬取豆瓣电影上关于复仇者联盟3的所有影评,并保存至本地文件。然后对影评进行分词分析,使用词云生成树人格鲁特的形象照片。

2. 代码实现

此部分主要解释Python爬虫部分及使用词云生成图像的代码

Python爬虫

首先获取需要爬取的网页地址,然后通过requests.get()方式去获取网页,代码如下:

# 获取网页
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 drawWordcloud():
with codecs.open('text.txt', encoding='utf-8') as f:
comment_text = f.read()
# 设置背景图片,可替换为img目录下的任何一张图片
color_mask = imread("img\Groot4.jpeg")
# 停用词设置
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=260,
max_font_size=150,
min_font_size=4,
mask=color_mask,
stopwords=Stopwords)
# 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数
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("img\comment_cloud.jpg")
为了方便阅读,这里贴出整体过程编码:
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("img\Groot4.jpeg")
# 停用词设置
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=260,
max_font_size=150,
min_font_size=4,
mask=color_mask,
stopwords=Stopwords)
# 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数
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("img\comment_cloud.jpg")

三、项目结构

项目结构

注意整个项目只有一个源码文件,其他的为图片文件

四、运行效果图

一大波格鲁特来袭

格鲁特1号

格鲁特2号

格鲁特3号

格鲁特4号

Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特

代码地址如下:
http://www.demodashi.com/demo/13257.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特的更多相关文章

  1. python 爬取豆瓣电影短评并wordcloud生成词云图

    最近学到数据可视化到了词云图,正好学到爬虫,各种爬网站 [实验名称] 爬取豆瓣电影<千与千寻>的评论并生成词云 1. 利用爬虫获得电影评论的文本数据 2. 处理文本数据生成词云图 第一步, ...

  2. Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  3. 利用Python爬取豆瓣电影

    目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com ...

  4. Python爬取豆瓣电影top

    Python爬取豆瓣电影top250 下面以四种方法去解析数据,前面三种以插件库来解析,第四种以正则表达式去解析. xpath pyquery beaufifulsoup re 爬取信息:名称  评分 ...

  5. python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

    本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://mo ...

  6. python 爬取豆瓣书籍信息

    继爬取 猫眼电影TOP100榜单 之后,再来爬一下豆瓣的书籍信息(主要是书的信息,评分及占比,评论并未爬取).原创,转载请联系我. 需求:爬取豆瓣某类型标签下的所有书籍的详细信息及评分 语言:pyth ...

  7. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: 2)数据提取,将web站点所获取的数据进行处理,获取所需要的数据,常使用的技 ...

  8. 零基础爬虫----python爬取豆瓣电影top250的信息(转)

    今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...

  9. python爬取豆瓣小组700+话题加回复啦啦啦python open file with a variable name

    需求:爬取豆瓣小组所有话题(话题title,内容,作者,发布时间),及回复(最佳回复,普通回复,回复_回复,翻页回复,0回复) 解决:1. 先爬取小组下,所有的主题链接,通过定位nextpage翻页获 ...

随机推荐

  1. 微信小程序自动去除input空格的方法

    当用户输入账号或者密码的时候,可能会有输入空格的情况,但是实际需要是不能够有空格的,所以我们要做一个去除空格,并且适应所有input的name参数的方法,下面请看源码: wxml: <input ...

  2. ChannelFactory

    通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了.我们不禁感叹WCF模型的简单,寥寥数行代码和配置,就可以把通信建立起 ...

  3. ASP.NET Core 2.2 基础知识(四) URL重写中间件

    说到URL重写就不得不提URL重定向. URL重定向 URL重定向是客户端操作,指示客户端访问另一个地址的资源.这需要往返服务器,并且当客户端对资源发出请求时,返回客户端的重定向URL会出现在浏览器的 ...

  4. [POI2014]Hotel

    题目大意: 给你一颗$n(n\le5000)$个点的树,选3个点使得它们两两距离相等,问共有几种选法. 思路: 首先我们不难发现一个性质:对于每3个符合条件的点,我们总能找到一个点使得这个点到那3个点 ...

  5. 泳池迷宫(p24)

    /*2018年8月26日15:55:29作者:冰樱梦page-24泳池迷宫*/public class swiming{public static void main(String[] args){i ...

  6. Problem M: 第几天——C语言初学者百题大战之十八

    #include<stdio.h> int main() { int a,b,c,s; scanf("%d-%d-%d",&a,&b,&c); ...

  7. Problem Z: 零起点学算法22——求正弦和余弦

    #include<stdio.h> #include <math.h> int main() { int n; ); double a,b; while(scanf(" ...

  8. Java高级架构师(一)第03节:多模块多Web应用合并War包

    多模块.多Web应用合并war包 在日常的系统开发中,如果担心各个系统的资源同名覆盖,可以在总的War模块下放置一份最终的资源. 将版本号改成9.1.0.v20131115,ok 在Idea中的Mav ...

  9. jdk_配置

    如果不知道jdk安装目录,可以使用如下命令查找到jdk安装目录 linux /usr/libexec/java_home windows版 新建系统变量JAVA_HOME(自己jdk的安装目录)C:\ ...

  10. java-继承-类变量与实例变量

    父类中的类的变量(静态属性)与其子类共享一份. 父类中的实例变量与其子类各自维护各自的.