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

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

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号