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

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

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异