网络爬虫(二)——《金刚:骷髅岛》电影分析

2023-10-19 18:50

本文主要是介绍网络爬虫(二)——《金刚:骷髅岛》电影分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络爬虫(二)

昨天写了一个网络爬虫的基本的小应用,获取了某种类型电影及其主页。晚上心血来潮,和小伙伴们计划明天去看一场电影,《金刚:骷髅岛》说起这部电影,还真是一无所知。之前看电影也是这样,向来是看完再看演员和导演背景什么的,看之前很少关注这些,但是想到昨天写的关于豆瓣的爬虫,忽然想做一点有趣的事,来看看我们明天要看的电影如何。

1. 数据提取

我想做的有趣的事就是,看看这部电影在网上的评论到底如何,也能最基本的预测一下这部电影的受欢迎程度吧。由于之前就在做关于豆瓣的爬虫,那就拿豆瓣的影评作为数据来源吧,(想过去国外网站提取数据的问题,这个以后可能要做一个,并且和国内影评进行对比)数据提取其实很简单,我们主要是分析豆瓣的网页数据就好。

1.1 构建网页地址

豆瓣的影评中使用的分页,是使用改变URL中的偏移量来实现的,因此,如果想要获得全部的影评的话,我们就直接改变URL中的偏移量即可,而且,这个偏移量还是有规律的,毕竟要保证网页的美观,使每页显示的评论数一样才好。

搜索页面的URL为:

URL_GET = 'https://movie.douban.com/subject_search'

构造URL,得到我们想要获取数据的url:

def url_api():"""Build the url for requests, we can change the rang then get more page.:return: a generator of url."""for number in range(0, 50):page = number * 15param = {'start': page, 'search_text': '科幻'}url = '?'.join([URL_GET, '%s']) % parse.urlencode(param)yield url

1.2 获取影评数据并存入文件中

这里我们将分析获得的网页,然后提取出我们感兴趣的评论数据,存入一个文件中。

def get_response(url):response = requests.get(url)if response.status_code == 200:time.sleep(1)return responseelse:raise Exception('RequestError')def local_comment(response):comm = []bso = bs(response.text, 'lxml')comments = bso.find_all('div', {'class', 'comment'})for com in comments:abc = com.find('p').get_text().strip('\n').replace(' ', '')comm.append(abc)return comm

说明:

  1. 在这段代码中,我们获取了每个网页中的评论信息,并且存入一个列表中,方便后续调用。
  2. 技巧:.strip(‘\n’).replace(’ ‘, ”)可以去除网页中多余的空格和换行,使获得的数据看起来更清晰。

注意: 这段代码有待优化,因为可能在获取评论的时候出错,要增加异常处理。

将提取的数据存入文件:

if __name__ == '__main__':for url in url_api():res = get_response(url)with open('comment.txt', 'a+', encoding='utf-8') as f:for comment in local_comment(res):try:f.write(comment)except Exception as e:pass

至此,我们获得了我们想要的数据。

2. 数据分析

之前在想这部分内容的时候想做成图表的形式,但是说到图表我们可能还需要一些数字信息,但是到目前为止我所获得的数据只有文字,而且还是中文的文字,看到网上有关于英文分词的文章,使用nltk库进行分析,但是nltk好像只支持英文分析,而且英文分析还是很简单的,直接将所有文章中的所有的标点去除,然后把所有的单词变为大(小)写,通过空格来分割单词,即可。但是中文分词还是挺难的,这里在网上找到了一个专门针对汉语分词的库jieba分析系统,而且这个项目还有很多的语言支持。

这里我们使用:

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
* sentence 为待提取的文本
* topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
* withWeight 为是否一并返回关键词权重值,默认值为 False
* allowPOS 仅包括指定词性的词,默认值为空,即不筛选

content = open('comment.txt', 'rb').read()
# tags is list type is iterable
tags = jieba.analyse.extract_tags(content, topK=100, withWeight=True)
input_data = {}
for i in tags:weight = int(10000 * i[1]//1)input_data[i[0]] = weight
print(input_data)

这样,我们就获取了在整个评论中,权重最大的前100个分词。至此,我原来想通过matplotlib画一个柱状图来表示的,但是仔细一想,如果是柱状图的话,那么横轴最少也要有100项,这并不利于观察,如果这里做一个关于字典键值对中的值的排序,因为值所对应的是数值,但是又不够直白。

网上有一个词云的数据表现形式,很直观,我们可以在线生成词云图片,而且在Python中也有国外大神写了这样的一个库wordcloud词云,我们可以参考相关连接。

d = path.dirname(__file__)
alice_coloring = imread("abc.jpg")
wc = WordCloud(font_path='abc.ttf',# 设置显示字体(指明字体路径)background_color="white",# 背景颜色max_words=2000,# 词云显示的最大词数mask=alice_coloring,  # 设置背景图片stopwords=STOPWORDS.add("said"),max_font_size=120,  # 字体最大值random_state=42,min_font_size=8)
wc.generate_from_frequencies(input_data)
image_colors = ImageColorGenerator(alice_coloring)# 以下代码显示图片
plt.imshow(wc)
plt.axis("off")
# 绘制词云
plt.figure()
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis("off")
# 绘制背景图片为颜色的图片
plt.figure()
plt.imshow(alice_coloring, cmap=plt.cm.gray)
plt.axis("off")
plt.show()
# 保存图片
wc.to_file(path.join(d, "jingang.png"))

这样,我们就生成了一张关于电影《金刚:骷髅岛》词云,让我们看看最后的成果吧。

3.23抓取数据词云:
3.23抓取数据词云

3.24抓取数据词云:

3.24抓取数据词云
这样一眼看上去,就能对这个电影有一个基本的了解了,仔细分析一下,还会看到很多意想不到的东西:

  1. 国内网友们对景甜的关注度显然是很高呀,但是并不知道国外怎样,这就是我想看国外网友评论的原因了。后期有时间去烂番茄抓取一些数据再做对比。
  2. 开始还不知道抖森呢,但是看完这个忽然发现,原来还有这样一个演员,哈哈,又张了见识了。
  3. 网友对金刚的特效效果评价还是很高的,看看词云就知道了,而且,国内网友的评价还是不低的,最起码,这不是一部烂片。
  4. 而且词云也告诉我们这里边是有彩蛋的呦,哈哈,收获还是不少的,至少不会提前离场了。
  5. 另外这部片子还真的和哥斯拉比起来了,看来很多人还是回忆起了当年的哥斯拉。

这篇关于网络爬虫(二)——《金刚:骷髅岛》电影分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241687

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re