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

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

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致