python爬虫爬取电影数据并做可视化

思路:

1、发送请求,解析html里面的数据

2、保存到csv文件

3、数据处理

4、数据可视化

需要用到的库:

import requests,csv  #请求库和保存库
import pandas as pd  #读取csv文件以及操作数据
from lxml import etree #解析html库
from pyecharts.charts import *  #可视化库

注意:后续用到分词库jieba以及词频统计库nltk 

环境:

python  3.10.5版本

编辑器:vscode -jupyter

使用ipynb文件的扩展名 vscode会提示安装jupyter插件

一、发送请求、获取html

#请求的网址
url='https://ssr1.scrape.center/page/1'#请求头
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}#发起请求,获取文本数据  
reponse=requests.get(url,url,headers=headers)
print(reponse)

二、使用xpath提取html里面的数据并存到csv

#创建csv文件
with open('电影数据.csv',mode='w',encoding='utf-8',newline='') as f:#创建csv对象csv_save=csv.writer(f)#创建标题csv_save.writerow(['电影名','电影上映地','电影时长','上映时间','电影评分'])for page in range(1,11):  #传播关键1到10页的页数#请求的网址url='https://ssr1.scrape.center/page/{}'.format(page)print('当前请求页数:',page)#请求头headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"}response=requests.get(url,url,headers=headers,verify=False)print(response)html_data=etree.HTML(response.text)#获取电影名title=html_data.xpath('//div[@class="p-h el-col el-col-24 el-col-xs-9 el-col-sm-13 el-col-md-16"]/a/h2/text()')#获取电影制作地gbs=html_data.xpath('//div[@class="p-h el-col el-col-24 el-col-xs-9 el-col-sm-13 el-col-md-16"]/div[2]/span[1]/text()')#获取电影时长time=html_data.xpath('//div[@class="m-v-sm info"]/span[3]/text()')#获取电影上映时间move_time=html_data.xpath('//div[@class="p-h el-col el-col-24 el-col-xs-9 el-col-sm-13 el-col-md-16"]/div[3]/span/text()')#电影评分numder=html_data.xpath('//p[@class="score m-t-md m-b-n-sm"]/text()')for name,move_gbs,times,move_times,numders in zip(title,gbs,time,move_time,numder):print('电影名:',name,'  电影上映地址:',move_gbs,'   电影时长:',times,'   电影上映时间:',move_times,'   电影评分:',numders)#name,move_gbs,times,move_times,numders#写入csv文件csv_save.writerow([name,move_gbs,times,move_times,numders])

效果:

三、使用pandas打开爬取的csv文件

data=pd.read_csv('电影数据.csv',encoding='utf-8')
print(data)

四、对电影名进行分词以及词频统计

注意:使用jieba分词,nltk分词  

这里的停用此表可以自己创建一个  里面放无意义的字,比如:的、不是、不然这些

每个字独占一行即可

import jiebatitle_list=[]for name in data['电影名']:#进行精准分词lcut=jieba.lcut(name,cut_all=False)
#     print(lcut)for i in lcut :
#         print(i)#去除无意义的词#打开停用词表文件file_path=open('停用词表.txt',encoding='utf-8')#将读取的数据赋值给stop_words变量stop_words=file_path.read()#遍历后的值 如果没有在停用词表里面 则添加到net_data列表里面if i not in stop_words:title_list.append(i)
# print(title_list)#计算词语出现的频率
from nltk import FreqDist #该模块提供了计算频率分布的功能#FreqDist对象将计算net_data中每个单词的出现频率,,并将结果存储在freq_list中
freq_list=FreqDist(title_list)
print(freq_list)  #结果:FreqDist 有1321个样本和5767个结果 #该方法返回一个包含最常出现单词及其出现频率的列表。将该列表赋值给most_common_words变量。
most_common_words=freq_list.most_common()
print(most_common_words)  #结果:('The这个词',出现185次)

效果:

五、词云可视化

# 创建一个 WordCloud类(词云) 实例  
word_cloud = WordCloud()  # 添加数据和词云大小范围    add('标题', 数据, word_size_range=将出现频率最高的单词添加到词云图中,并设置单词的大小范围为 20 到 100。)  
word_cloud.add('词云图', most_common_words, word_size_range=[20, 100])  # 设置全局选项,包括标题  
word_cloud.set_global_opts(title_opts=opts.TitleOpts(title='电影数据词云图'))  # 在 Jupyter Notebook 中渲染词云图  
word_cloud.render_notebook()#也可以生成html文件观看
word_cloud.render('result.html')

运行效果:

 

六、对电影时长进行统计并做柱形图可视化

#电影时长   去除分钟和,号这个 转为int  然后再转为列表  只提取20条数据,总共100条
move_time=data['电影时长'].apply(lambda x: x.replace('分钟', '').replace(',', '')).astype('int').tolist()[0:20]
# print(move_time)#电影名   只提取20条数据
move_name=data['电影名'].tolist()[0:20]
# print(move_name)#创建Bar实例
Bar_obj=Bar()#添加x轴数据标题
Bar_obj.add_xaxis(move_name)#添加y轴数据
Bar_obj.add_yaxis('电影时长数据(单位:分钟)',move_time)#设置标题
Bar_obj.set_global_opts(title_opts={'text': '电影时长数据柱形图可视化'})# 显示图表
Bar_obj.render_notebook()

效果:

七、电影时长折线图可视化


#去除分钟和,号这个 转为int  然后再转为列表  只提取25条数据
move_time=data['电影时长'].apply(lambda x: x.replace('分钟', '').replace(',', '')).astype('int').tolist()[0:25]
# print(move_time)#电影名   只提取25条数据
move_name=data['电影名'].tolist()[0:25]
# print(move_name)#创建Bar实例
Bar_obj=Line()#添加x轴数据标题
Bar_obj.add_xaxis(move_name)#添加y轴数据
Bar_obj.add_yaxis('电影时长数据(单位:分钟)',move_time)#设置标题
Bar_obj.set_global_opts(title_opts={'text': '电影时长数据折线图可视化'})# 显示图表
Bar_obj.render_notebook()

效果:

 

八、统计每个国家电影上映的数量

import jiebatitle_list=[]#遍历电影上映地这一列
for name in data['电影上映地']:#进行精准分词lcut=jieba.lcut(name,cut_all=False)
#     print(lcut)for i in lcut :
#         print(i)#去除无意义的词#打开停用词表文件file_path=open('停用词表.txt',encoding='utf-8')#将读取的数据赋值给stop_words变量stop_words=file_path.read()#遍历后的值 如果没有在停用词表里面 则添加到net_data列表里面if i not in stop_words:title_list.append(i)
# print(title_list)#计算词语出现的频率
from nltk import FreqDist #该模块提供了计算频率分布的功能#FreqDist对象将计算net_data中每个单词的出现频率,,并将结果存储在freq_list中
freq_list=FreqDist(title_list)
print(freq_list)  #结果:FreqDist 有1321个样本和5767个结果 #该方法返回一个包含最常出现单词及其出现频率的列表。将该列表赋值给most_common_words变量。
most_common_words=freq_list.most_common()
print(most_common_words)  #结果:('单人这个词',出现185次)#电影名 使用列表推导式来提取most_common_words中每个元素中的第一个元素,即出现次数,然后将它们存储在一个新的列表中
map_data_title = [count[0] for count in most_common_words]  
print(map_data_title)#电影数
map_data=[count[1] for count in most_common_words]  
print(map_data)

效果:

九、对每个国家电影上映数量饼图可视化

#获取map_data_title的长度,决定循环次数,赋值给遍历i 在通过下标取值 
result = [[map_data_title[i], map_data[i]] for i in range(len(map_data_title))]
print(result)# 创建Pie实例
chart=Pie()#添加标题和数据   radius=['圆形空白处百分比','色块百分比(大小)'] 可不写
chart.add('电影上映数饼图(单位:个)',result,radius=['50%','60%'])#显示
chart.render_notebook()

效果:

觉得有帮助的话,点个赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山西电力市场日前价格预测【2023-09-19】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-19)山西电力市场全天平均日前电价为358.08元/MWh。其中,最高日前电价为417.72元/MWh,预计出现在19: 00。最低日前电价为325.97元/MWh,预计…

十四、流式编程(2)

本章概要 中间操作 跟踪和调试流元素排序移除元素应用函数到元素在 map() 中组合流 中间操作 中间操作用于从一个流中获取对象,并将对象作为另一个流从后端输出,以连接到其他操作。 跟踪和调试 peek() 操作的目的是帮助调试。它允许你无修改地查看…

为何网站一定要使用SSL证书

当您在浏览器中输入网址并按下回车键时,您是否曾想过您的个人信息和隐私是否会被窃取?在当今数字化的时代,网络安全问题越来越受到人们的关注。而SSL证书正是保护您的网站和用户信息安全的重要工具。 SSL证书是一种数字证书,它使用…

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 之 QML 与 C 混合编程详解 一、Qt Quick 之 QML 与 C 混合编程详解在 QML 中使用 C 类和对象实现可以导出的 C 类Q_INVOKABLE 宏Q_ENUMSQ_PROPERTY注册一个 QML 中可用的类型注册 QML 类型在 QML 中导入 C 注册的类型完整的 colorMaker 实例导出一个 C 对象为 QML 的属…

【八大经典排序算法】冒泡排序

【八大经典排序算法】冒泡排序 一、概述二、思路解读三、代码实现四、优化 一、概述 冒泡排序由于其简单和易于理解,使其成为初学者学习排序算法的首选,也是初学者接触到的第一个排序算法。其原理是通过重复交换相邻的元素来将最大的元素逐步“冒泡”到…

二叉树的概念、存储及遍历

一、二叉树的概念 1、二叉树的定义 二叉树( binary tree)是 n 个结点的有限集合,该集合或为空集(空二叉树),或由一个根结点与两棵互不相交的,称为根结点的左子树、右子树的二叉树构成。 二叉树的…

C语言开发手册,辅助工具

方便查函数,头文件,日常语法,c99与c11的差异,等 https://www.php.cn/manual/view/34866.html

【JDK 8-函数式编程】4.6 方法引用与构造函数引用

一、 方法引用与构造函数引用 1. 说明 2. 语法: 二、静态方法 三、实例方法 四、构造函数 4.1 单个参数 4.2 2个参数 五、执行结果 一、 方法引用与构造函数引用 以前调用:对象.方法名、类名.方法名 jdk1.8提供了另外一种调用方式 :: 1. 说明 用来直接访…

分布式缓冲-搭建主从架构

个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:三人行,必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud…

上海长宁来福士P2.5直径4米无边圆形屏圆饼屏圆面屏圆盘屏平面圆屏异形创意LED显示屏案例

长宁来福士广场是一个大型广场,坐落于上海中山公园商圈的核心区域,占地逾6万平方米,其中地上总建筑面积近24万平方米,总投资额约为96亿人民币。 LED圆形屏是根据现场和客户要求定制的一款异形创意LED显示屏,进行文字、…

WPF中DataGrid控件绑定数据源

步骤 创建数据源:首先,我们需要创建一个数据源,可以是一个集合(如List、ObservableCollection等),也可以是一个DataTable对象。数据源中的每个元素代表一行数据。 设置DataGrid的ItemsSource属性&#xff…

Linux集群时间同步方法

参考:https://www.cnblogs.com/felixzh/p/10638399.html

Dockerfile

Dockerfile Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。 更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs D…

JVM执行流程

一、Java为什么是一种跨平台的语言? 通常,我们编写的java源代码会被JDK的编译器编译成字节码文件,再由JVM将字节码文件翻译成计算机读的懂得机器码进行执行;因为不同平台使用的JVM不一样,所以不同的JVM会把相同的字节码…

以神龙出行小程序为例,说一些网站技术

注册和登录功能: 用户注册和登录可以使用手机号验证、第三方登录等方式来实现。这需要与后台服务器进行数据交互,并进行身份验证。 数据存储和管理: 用户的个人信息和常用地址需要进行存储和管理。这可以通过数据库来实现,如关系…

【分布式】分布式事务:2PC

分布式事务的问题可以分为两部分: 并发控制 concurrency control原子提交 atomic commit 分布式事务问题的产生场景:一份数据被分片存在多台服务器上,那么每次事务处理都涉及到了多台机器。 可序列化(并发控制)&…

每日一题 337. 打家劫舍 III

难度:中等 整体思路相当于是前两天的方法倒过来,毕竟二叉树最常用的解法就是递归倒推 对于每一颗子树,他必定有一种最大的盗取方法,但是只有它的 root 的盗取情况才会影响到 root 的父节点,即如果收益最大的盗取方法…

图像处理:双边滤波

1. 双边滤波 公式含义: q:输入的像素点,它代表上图中55的方框中其中的一个像素点 : 空间域核 : 图像像素域核 (两个二维高斯函数,二维高斯函数的公式为:) 进行了一些小的改动,让他们更加符合我们的要求&#xff0…

【每日一题】1146. 快照数组

1146. 快照数组 - 力扣(LeetCode) 实现支持下列接口的「快照数组」- SnapshotArray: SnapshotArray(int length) - 初始化一个与指定长度相等的 类数组 的数据结构。初始时,每个元素都等于 0。void set(index, val) - 会将指定索引…

【去除若依首页】有些小项目不需要首页,去除方法

第一步 // // // // // // // // // // // // // // // // // // 修改登录页 Login.vue 中 大概144行 ,注释掉原有跳转。替换为自己的跳转路径 // // // // // // // // // // // // // this.$router.push({ path: this.redirect || …