爬虫基础之爬取猫眼Top100 可视化

网站: TOP100榜 - 猫眼电影 - 一网打尽好电影
 

本次案例所需用到的模块
requests (发送HTTP请求)

pandas(数据处理和分析 保存数据)

parsel(解析HTML数据) 

pyecharts(数据可视化图表)

pymysql(连接和操作MySQL数据库)

lxml(数据解析模块)


确定爬取的内容:

  1. 电影名称

  2. 电影主演

  3. 上映时间

  4. 评分

分析页面:

确认是静态数据还是动态数据
右击打开网页源代码   快捷键Ctrl+F 打开搜索框 搜索需要爬取的数据

可以发现 此数据为静态数据  即所需要的数据都在网页上面

爬取步骤:

一.发送请求 模拟浏览器向服务器发送请求

二. 解析数据   从网页中提取数据

三. 保存数据  将爬取到的数据保存为本地文件

OK 我们开始写代码
将浏览器的url地址复制 构建请求头参数
此网站需要登陆 才能拿到数据 请求体中一般包含三个数据 UA(浏览器的基本信息) referer(就是防盗链 即当前页面通过哪个页面跳转过来的)  cookie(用户的一些基本信息)

# 导包
import requestsurl = 'https://www.maoyan.com/board/4?timeStamp=1741780786427&channelId=40011&index=2&signKey=30a132dd14a76c19cfd2759ba27adc28&sVersion=1&webdriver=false'headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0','referer':'https://www.maoyan.com/','cookie':'你的cookie'}
resp = requests.get(url,headers=headers)
print(resp.text)

打印我们从浏览器爬取下来的信息
Ctrl+F 快捷键 搜索确认 数据在返回的信息中 

第二步 解析数据

打开开发者工具中的元素 用左上角的小箭头去查看页面的结构

定位元素 拿到对应的class属性值  采取parserl模块里面的css 的来提取数据

我们可以看到  爬取下来的内容中 有空格 缩进
处理办法: 转换成字符串类型的格式 然后使用strip()方法 去掉空格 replace 替换方法去除不要的文字  只保留主演名字

movie_time = li.css('.releasetime::text').get().replace('上映时间:', '')
# 上映时间也一样 只保留时间

最后 这个评分是分开的  需要做个字符串的拼接

getall() 拿到所有满足条件的class属性为score 下面i 标签中的文本  其返回的是个列表 通过对列表取值 就可以拿到这两个分开的评分  最后拼接起来 输出打印莫问题

movie_s = li.css('.score i::text').getall()[0]
movie_ore = li.css('.score i::text').getall()[-1]
movie_score = movie_s + movie_ore

所有的信息提取完毕 接下来我们保存数据

三.保存数据

将数据存储在字典中  在外面定义一个空列表  最后将字典添加到列表中

data = []dit = {'电影名': movie_name,'主演': movie_actor,'上映时间': movie_time,'评分': movie_score
}
data.append(dit)

最后听过pandas 保存数据  

# 传入我们的列表 设置索引列为false 即不生成额外的一列索引
pd.DataFrame(data).to_excel('Top100.xlsx', index=False)

本次爬虫板块的代码如下  还有保存到数据库的就不讲解了 详细的话看我之前的文章
多页爬取的话 分析几页的url地址可得  多了个offset参数 每页间隔10 后续通过for循环遍历即可 

import requests
import parsel
import pandas as pd
import pymysql# 建立连接
connect = pymysql.connect(user='root',password="112233",host='localhost',database='douban', )
# 拿游标
cursor = connect.cursor()# 此模块集成了css  xpath re正则三种解析数据的模块
data = []
for page in range(0, 101, 10):url = f'https://www.maoyan.com/board/4?timeStamp=1741780786427&channelId=40011&index=2&signKey=30a132dd14a76c19cfd2759ba27adc28&sVersion=1&webdriver=false&offset={page}'headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0','referer':'https://www.maoyan.com/','cookie':'你的cookie'}resp = requests.get(url, headers=headers)selector = parsel.Selector(resp.text)lis = selector.css('.board-wrapper dd')for li in lis:movie_name = li.css('.name a::attr(title)').get()movie_actor = li.css('.star::text').get().strip().replace('主演:', '')movie_time = li.css('.releasetime::text').get().replace('上映时间:', '')movie_s = li.css('.score i::text').getall()[0]movie_ore = li.css('.score i::text').getall()[-1]movie_score = movie_s + movie_oredit = {'电影名': movie_name,'主演': movie_actor,'上映时间': movie_time,'评分': movie_score}data.append(dit)# pd.DataFrame(data).to_excel('Top100.xlsx', index=False)#     准备sql语句sql = 'insert into top100 values (%s,%s,%s,%s)'cursor.executemany(sql,[(movie_name,movie_actor,movie_time,movie_score)])# 提交事务connect.commit()

爬取的数据如下: 

 接着我们清洗数据  将excel文件中上映时间的字段 中的国家地名去掉  只保留纯日期数值
至于如何查看 数据的一些信息 语法就不在这里介绍了 可以看之前的文章

# 导包 读取文件
import pandas as pddf = pd.read_excel('Top100.xlsx', index_col=False)
# 将上映时间这一列的数据中的日期提取出来 重新赋值给上映时间这一列
df['上映时间'] = df['上映时间'].str.extract(r'(\d{4}-\d{2}-\d{2})')# 去除空数据
# 将数据中的空数据去除  在原有的数据上
df.dropna(inplace=True)# 将处理好的数据保存到新的文件中  不生成索引列
df.to_excel('new_Top.xlsx', index=False)

# 导包
from pyecharts.charts import Line
from pyecharts import options as opts# 生成柱状图
c = (Line()# 添加x轴 数据 将电影名这一列的数据转换成列表.add_xaxis(df['电影名'].tolist())# 添加y轴 设置y轴名称  同样将数据转换成列表.add_yaxis('评分', df['评分'].tolist())# 设置 配置项.set_global_opts(# 标题与副标题的设置title_opts=opts.TitleOpts(title="Top100电影评分", subtitle='副标题'),# x轴相关的设置  设置x轴的数据 向右旋转45 -45 为逆时针xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)))# 列的设置 不显示每一列上面的数据.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
# 生成html 文件
c.render('Top100.html')

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

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

相关文章

解决Qt信号在构造函数中失效的问题

情景引入:音乐播放器的“幽灵列表”问题 假设你正在开发一个音乐播放器应用,其中有一个功能是用户首次打开应用时,需要从服务器拉取最新的歌曲列表并显示在“本地音乐”页面中。你可能会写出类似这样的代码: // LocalSong 类的构…

Hadoop 启动,发现 namenode、secondary namenodes,这两个没有启动,报错超时。

今天在启动 hadoop 的时候,发现本应该同时启动的 namenode、secondary namenodes 却都没有启动。我还以为是坏了又重新装了虚拟机,重新下载 Hadoop 重新配置结果还是同样的问题,那没办法只能去解决问题了。 首先先再次尝试启动看他报错是什么…

Ranger 鉴权

Apache Ranger 是一个用来在 Hadoop 平台上进行监控,启用服务,以及全方位数据安全访问管理的安全框架。 使用 ranger 后,会通过在 Ranger 侧配置权限代替在 Doris 中执行 Grant 语句授权。 Ranger 的安装和配置见下文:安装和配置 …

Sqlserver安全篇之_启用和禁用Named Pipes的案列介绍

https://learn.microsoft.com/zh-cn/sql/tools/configuration-manager/named-pipes-properties?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/tools/configuration-manager/client-protocols-named-pipes-properties-protocol-tab?viewsql-server-ver16 默认…

深入解析过滤器模式(Filter Pattern):一种灵活高效的设计模式

过滤器模式(Filter Pattern),也被称为标准模式,是一种常见的结构型设计模式。它通过将对象分为不同的标准或条件,使得对对象集合的操作变得更加灵活和高效。特别适用于处理复杂查询和条件过滤的场景。过滤器模式不仅能…

Spring Boot 整合 Elasticsearch 实践:从入门到上手

引言 Elasticsearch 是一个开源的分布式搜索引擎,广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程,在 Spring Boot 项目中整合 Elasticsearch,轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先&#xff…

2025年Postman的五大替代工具

虽然Postman是一个广泛使用的API测试工具,但许多用户在使用过程中会遇到各种限制和不便。因此,可能需要探索替代解决方案。本文介绍了10款强大的替代工具,它们能够有效替代Postman,成为你API测试工具箱的一部分。 什么是Postman&…

Redis之单线程与多线程

redis 单线程与多线程 Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包含获取(socket读)、解析、执行、内容返回(socket写)等都由一个顺序串行的主线程处理,这就是…

C#的简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式是一种创建型设计模式,主要将对象的创建和使用分离,使得系统更加灵活和可维护。常见的工厂模式有简单工厂模式、工厂方法模式和抽象工厂模式,以下是 C# 实现的三个案例: 简单工厂模式 简单工厂模式通过一个工厂类来创建…

python基础8 单元测试

通过前面的7个章节,作者学习了python的各项基础知识,也学习了python的编译和执行。但在实际环境上,我们需要验证我们的代码功能符合我们的设计预期,所以需要结合python的单元测试类,编写单元测试代码。 Python有一个内…

算法刷题力扣

先把大写的字母变成小写的&#xff0c;用大写字母32即可变为小写字母。 写循环跳过字符。 然后判断是否相等即可。具体代码如下&#xff1a; class Solution { public: bool isPalindrome(string s) { int sizes.size(); int begin0; int ends.size()-1; for(int i0;i<s…

allure下载安装及配置

这里写目录标题 一、JDK下载安装及配置二、allure下载三、allure安装四、allure环境变量配置五、allure验证是否安装成功 一、JDK下载安装及配置 allure 是一个java测试报告框架。所以要基于JDK环境。 JDK下载与安装及配置&#xff1a;https://blog.csdn.net/qq_24741027/arti…

linux之 内存管理(1)-armv8 内核启动页表建立过程

一、内核启动时&#xff0c;页表映射有哪些&#xff1f; Linux初始化过程&#xff0c;会依次建立如下页表映射&#xff1a; 1.恒等映射&#xff1a;页表基地址idmap_pg_dir; 2.粗粒度内核镜像映射&#xff1a;页表基地址init_pg_dir; 3.fixmap映射&#xff1a;页表基地址为…

【面试问题】Java 接口与抽象类的区别

引言 在 Java 面向对象编程中&#xff0c;接口&#xff08;Interface&#xff09;和抽象类&#xff08;Abstract Class&#xff09;是两个重要的抽象工具。它们都能定义未实现的方法&#xff0c;但设计目标和使用场景截然不同。本文将通过语法、特性和实际案例&#xff0c;深入…

【资料分享】全志科技T113-i全国产(1.2GHz双核A7 RISC-V)工业核心板规格书

核心板简介 创龙科技SOM-TLT113 是一款基于全志科技T113-i 双核ARM Cortex-A7 玄铁C906 RISC-V HiFi4 DSP 异构多核处理器设计的全国产工业核心板&#xff0c;ARM Cortex-A7 处理单元主频高达1.2GHz。核心板 CPU、ROM、RAM、电源、晶振等所有元器件均采用国产工业级方案&…

R语言高效数据处理-自定义格式EXCEL数据输出

注&#xff1a;以下代码均为实际数据处理中的笔记摘录&#xff0c;所以很零散&#xff0c; 将就看吧&#xff0c;这一篇只是代表着我还在&#xff0c;所以可能用处不大&#xff0c;这一段时间都很煎熬&#xff01; 在实际数据处理中为了提升效率&#xff0c;将Excel报表交付给…

LeetCode 30 —— 30.串联所有单词的子串

题目&#xff1a; 给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。 注意子串要与 words 中的单词完全匹配&#xff0c;中间不能有其他字符&#xff0c;但不需要考虑 words 中单词串联的顺序。 示例 1&#xff…

《算法笔记》9.2小节——数据结构专题(2)->二叉树的遍历 问题 A: 复原二叉树(同问题 C: 二叉树遍历)

题目描述 小明在做数据结构的作业&#xff0c;其中一题是给你一棵二叉树的前序遍历和中序遍历结果&#xff0c;要求你写出这棵二叉树的后序遍历结果。 输入 输入包含多组测试数据。每组输入包含两个字符串&#xff0c;分别表示二叉树的前序遍历和中序遍历结果。每个字符串由…

SpringBoot-2整合MyBatis以及基本的使用方法

目录 1.引入依赖 2.数据库表的创建 3.数据源的配置 4.编写pojo类 5.编写controller类 6.编写接口 7.编写接口的实现类 8.编写mapper 1.引入依赖 在pom.xml引入依赖 <!-- mysql--><dependency><groupId>com.mysql</groupId><artifac…

Unity Shader Graph高级节点逻辑设计:程序化噪声生成技术详解

一、程序化噪声的核心价值 程序化噪声生成是Shader开发中的关键核心技术&#xff0c;通过数学算法直接生成纹理信息&#xff0c;相较于传统位图纹理具有以下优势&#xff1a; 无限分辨率&#xff1a;可动态适应任意显示精度 参数化控制&#xff1a;实时调整噪声频率、振幅等属…