python之爬取豆瓣排行与可视化

 找到目标网址:

url = "https://movie.douban.com/chart"
豆瓣电影排行榜

鼠标右键,检查 复制url,与user-agent:

 

url = "https://movie.douban.com/chart"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}

 鼠标右键+查看源代码,找到电影目标位置

 

 匹配正则表达式

# 匹配
obj = re.compile(r'<div class="pl2">.*?<a .*?>(?P<name>.*?)</a>.*?'r'<div class="star clearfix">.*?<span class="rating_nums">(?P<score>.*?)</span>.*?'r'<span class="pl">\((?P<total>.*?)人评价\)</span>', re.S)

 可视化参考:

python爬取B站弹幕评论-CSDN博客

python之搞定Matplotlib从入门到实战演练-CSDN博客

完整代码:

import requests
import re
import matplotlib.pyplot as plt
import numpy as npurl = "https://movie.douban.com/chart"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
}resp = requests.get(url, headers=headers)
page_content = resp.text# 匹配
obj = re.compile(r'<div class="pl2">.*?<a .*?>(?P<name>.*?)</a>.*?'r'<div class="star clearfix">.*?<span class="rating_nums">(?P<score>.*?)</span>.*?'r'<span class="pl">\((?P<total>.*?)人评价\)</span>', re.S)
# 存储电影数据的列表
movies = []
# 开始匹配
result = obj.finditer(page_content)
for it in result:# strip()方法:去除提取出的电影名称两端的空白字符# replace()方法:去除斜杠及其后面的内容name = it.group("name").strip().split('/')[0]score = it.group("score")total = it.group("total")# 为每部电影创建一个字典movie_info = {"电影名称": name.strip(),"电影评分": score,"评价人数": total}movies.append(movie_info)# print(f"电影名称:{name.strip()}\n电影评分:{score}\n评价人数:{total}\n")# 打印电影字典列表
for movie in movies:print(movie)# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签# 提取数据用于绘图
movie_names = [movie["电影名称"] for movie in movies]
movie_scores = [float(movie["电影评分"]) for movie in movies]
movie_totals = [int(movie["评价人数"].replace(',', '')) for movie in movies]# 创建柱状图
# 设置图形的大小。它是一个元组,包含两个数字,分别表示图形的宽度和高度
# fig, (ax1, ax2)创建一个图形和两个子图,子图排列为一行两列
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 7))  # 创建一个包含两个子图的图形# 第一个子图:电影评分
x = np.arange(len(movie_names))
width = 0.35
# rects1是一个BarContainer对象
rects1 = ax1.bar(x - width / 2, movie_scores, width, label='电影评分', color='blue', alpha=0.7)# 每个柱顶标上数量
for bar in rects1:height = bar.get_height()  # 获取条形的高度x_pos = bar.get_x() + width / 2  # 计算 x 坐标,使标签居中于条形y_pos = height + 0.1  # 计算 y 坐标,稍微高于条形顶部以避免重叠(0.1 是个调整值,可以根据需要修改)ax1.text(x_pos, y_pos, f'{height}', ha='center', va='bottom')  # 在条形上方添加标签ax1.set_xticks(x)
ax1.set_xticklabels(movie_names, rotation=-45, ha='left')
ax1.set_title('电影评分')
ax1.set_xlabel('电影名称')
ax1.set_ylabel('评分')
ax1.legend()
ax1.grid(axis='y', linestyle='--', alpha=0.7)# 第二个子图:评价人数
rects2 = ax2.bar(x + width / 2, movie_totals, width, label='评价人数', color='green', alpha=0.7)# 每个柱顶标上数量
for bar in rects2:height = bar.get_height()  # 获取条形的高度x_pos = bar.get_x() + width / 2  # 计算 x 坐标,使标签居中于条形y_pos = height + 0.1  # 计算 y 坐标,稍微高于条形顶部以避免重叠(0.1 是个调整值,可以根据需要修改)ax2.text(x_pos, y_pos, f'{height}', ha='center', va='bottom')  # 在条形上方添加标签ax2.set_xticks(x)
ax2.set_xticklabels(movie_names, rotation=-45, ha='left')
ax2.set_title('评价人数')
ax2.set_xlabel('电影名称')
ax2.set_ylabel('人数')
ax2.legend()
ax2.grid(axis='y', linestyle='--', alpha=0.7)# 调整布局以避免重叠
fig.tight_layout()# 显示图形
plt.show()

恭喜您学会了,快去试试吧 !!!

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

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

相关文章

SQL进阶技巧:如何找出开会时间有重叠的会议室?| 时间区间重叠问题

目录 0 场景描述 1 数据准备 2 问题分析 方法1:利用 lateral view posexplode()函数将表展开成时间明细表 方法2:利用数学区间讨论思想求解 3 小结 0 场景描述 有7个会议室,每个会议室每天都有人开会,某一天的开会时间如下: 查询出开会时间有重叠的是哪几个会议室?…

算法专题七: 分治归并

目录 1. 排序数组2. 交易逆序对的总数3. 计算右侧小于当前元素的个数4. 翻转对 1. 排序数组 算法思路: 本道题使用归并的思路进行排序, 先讲数组分为左右两个区间, 然后合并两个有序数组. class Solution {vector<int> tmp; public:vector<int> sortArray(vector&…

sentinel原理源码分析系列(五)-构建调用链路

上节分析构建插槽链&#xff0c;Sentinel的资源调用好比一个个连续的检查口&#xff0c;能否通过&#xff0c;使用检查规则和统计指标&#xff0c;本章开始分析插槽&#xff0c;首先分析构建调用链路的两个插槽 构建调用链路 构建调用链路为指标统计搭建好结构&#xff0c;调…

文件误删并清空回收站:全面解析与高效恢复策略

一、文件误删并清空回收站的遭遇 在日常使用电脑或移动设备的过程中&#xff0c;我们难免会遇到一些令人懊恼的数据丢失问题&#xff0c;其中文件误删并清空回收站便是最为常见的一种。当你不小心删除了某个重要文件&#xff0c;并且随后又毫不留情地清空了回收站&#xff0c;…

双十一母婴必买清单 推荐超实用母婴用品

随着双十一购物狂欢节的临近&#xff0c;无数准父母和年轻家长开始摩拳擦掌&#xff0c;准备为家中的小宝贝抢购一系列高品质、实用的母婴用品。在这个年度最大的电商促销活动中&#xff0c;选择对的产品不仅能够节省开支&#xff0c;更能确保宝宝的健康成长与舒适生活。以下是…

【C++ STL 模板类】pair 键值对

文章目录 【 1. pair 对象的创建 】【 2. pair 对象的赋值 】【 3. pair 对象的比较 】【 4. pair对象成员的互换】 C STL 标准库提供了 pair 类模板&#xff0c;专门用来将 2 个普通元素 first 和 second&#xff08;可以是 C 基本数据类型、结构体、类自定的类型&#xff09;…

中安未来 OCR:开启高效身份证件识别新时代

在数字化快速发展的今天&#xff0c;高效准确地处理各类信息变得至关重要。中安未来 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术以其卓越的性能和广泛的应用场景&#xff0c;成为了众多企业和机构的得力助手。其中&#xff0c;身份…

480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?

技术背景 好多开发者&#xff0c;在设置视频编码参数的时候&#xff0c;对不同分辨率的带宽设置&#xff0c;缺乏相关的经验&#xff0c;实际上&#xff0c;视频分辨率与所需带宽之间的关系受到多个因素的影响&#xff0c;包括视频编码方式、帧率、视频内容的动态程度等。下面…

SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)

TOC 问题背景 从零开始学springcloud微服务项目 注意事项&#xff1a; 约定 > 配置 > 编码IDEA版本2021.1这个项目&#xff0c;我分了很多篇章&#xff0c;每篇文章一个操作步骤&#xff0c;目的是显得更简单明了controller调service&#xff0c;service调dao默认安装ngi…

5G工业路由器智能电网部署实录:一天内解决供电、网络

凌晨4:13,我被手机震动惊醒。变电站值班人员发来紧急消息:昨晚部署的SR800突然离线。我立即查看了STAR Device Manager平台,确认是设备A37号在3:47分失去连接。(key-iot.com/iotlist/sr800-3.html) 6:30到达变电站。检查SR800状态,发现是供电问题导致设备重启。这个老旧变电站…

Docker 安装使用

1. 下载 下载地址&#xff1a;Index of linux/static/stable/x86_64/ 下载好后&#xff0c;将文件docker-18.06.3-ce.tgz用WinSCP等工具&#xff0c;上传到不能外网的linux系统服务器 2. 安装 解压后的文件夹docker中文件如下所示&#xff1a; 将docker中的全部文件&#xff…

Gstreamer的webrtcbin插件

1、输入参数 static GOptionEntry entries[] {{"peer-id", 0, 0, G_OPTION_ARG_STRING, &peer_id, "String ID of the peer to connect to", "ID"},{"server", 0, 0, G_OPTION_ARG_STRING, &server_url, "Signalling se…

Android15音频进阶之组音量调试(九十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

输出时间序列中的时区是什么Series.dt.tz_convert(tz)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 输出时间序列中的时区是什么 Series.dt.tz_convert(tz) [太阳]选择题 关于以下代码的输出结果的说法中正确的是? import pandas as pd t pd.date_range(start2014-08-01 09:00, freq…

【Java】常用方法合集

以 DemoVo 为实体 import lombok.Data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;Data ExcelIgnoreUnannotated public class ExportPromoteUnitResult {private String id;ExcelProperty(value &qu…

学习莫烦python---神经网络

一、卷积神经网络区别 1、“卷积” 和 “神经网络”. 卷积也就是说神经网络不再是对每个像素的输入信息做处理了,而是图片上每一小块像素区域进行处理, 这种做法加强了图片信息的连续性. 使得神经网络能看到图形, 而非一个点. 这种做法同时也加深了神经网络对图片的理解 –翻译…

项目结构(后端+前端)(若依)

项目结构&#xff08;后端前端&#xff09; 文章目录 项目结构&#xff08;后端前端&#xff09;前言一、后端结构1.若依 二、前端结构1. 总结 前言 方便了解项目结构 提示&#xff1a;以下是本篇文章正文内容&#xff1a; 一、后端结构 1.若依 com.ruoyi ├── ruoyi-adm…

SQL语句高级查询(适用于新手)

SQL查询语句的下载脚本链接&#xff01;&#xff01;&#xff01; 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 本文旨在为那些编程基础相对薄弱的朋友们提供一份详尽的指南&#xff0c;特别聚…

【C++篇】栈的层叠与队列的流动:在 STL 的节奏中聆听算法的静谧旋律

文章目录 C 栈与队列详解&#xff1a;基础与进阶应用前言第一章&#xff1a;栈的介绍与使用1.1 栈的介绍1.2 栈的使用1.2.1 最小栈1.2.2 示例与输出 1.3 栈的模拟实现 第二章&#xff1a;队列的介绍与使用2.1 队列的介绍2.2 队列的使用2.2.1 示例与输出 2.3 队列的模拟实现2.3.…

Java项目-基于spingboot框架的篮球论坛系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…