Python 爬取天气预报并进行可视化分析
今天,我们就来学习如何使用 Python 爬取天气预报数据,并用数据可视化的方式将未来几天的天气信息一目了然地展示出来。
在本文中,我们将分三步完成这一任务:
- 使用 Python 爬取天气数据
- 数据解析与处理
- 用可视化展示天气趋势
让我们开始吧!
第一步:准备工作
在正式开始之前,我们需要安装一些常用的 Python 库。这些库可以帮助我们更高效地获取数据、解析内容以及进行数据可视化。
首先,打开终端,安装以下库:
pip install requests
pip install beautifulsoup4
pip install matplotlib
pip install pandas
各库介绍:
requests
: 用来发送 HTTP 请求,获取网页数据。beautifulsoup4
: 用于解析 HTML 数据,提取网页中的有用信息。matplotlib
和pandas
: 用于处理数据,并创建漂亮的可视化图表。
第二步:爬取天气预报数据
现在,让我们编写 Python 代码,爬取一个天气预报网站的数据。这里我们将使用 中国天气网 作为数据来源。通过发送请求并解析页面中的 HTML 结构,我们可以轻松获取我们想要的天气信息。
爬取数据的源码
代码
import requests
from bs4 import BeautifulSoup
import pandas as pddef get_weather_data(city_code):# 目标URL:通过城市代码获取该城市的天气预报url = f"http://www.weather.com.cn/weather/{city_code}.shtml"# 发送HTTP请求获取网页数据response = requests.get(url)response.encoding = 'utf-8' # 设置编码为utf-8# 使用BeautifulSoup解析网页内容soup = BeautifulSoup(response.text, 'html.parser')# 从网页中提取天气数据forecast_data = []weather_list = soup.find('ul', class_='t clearfix').find_all('li')for weather in weather_list:date = weather.find('h1').text # 提取日期weather_desc = weather.find('p', class_='wea').text # 提取天气情况temp = weather.find('p', class_='tem').text.strip() # 提取温度wind = weather.find('p', class_='win').find('span')['title'] # 提取风力信息# 将每条天气数据存储为字典forecast_data.append({'date': date,'weather': weather_desc,'temperature': temp,'wind': wind})# 将数据转换为DataFrame,便于后续处理weather_df = pd.DataFrame(forecast_data)return weather_df# 使用城市代码获取天气数据,以下代码为北京的天气预报(代码为101010100)
city_code = '101010100'
weather_df = get_weather_data(city_code)
print(weather_df)
说明:
requests.get(url)
: 我们首先使用requests
库向天气网站发送 HTTP 请求,并获取返回的网页内容。BeautifulSoup
: 然后用BeautifulSoup
来解析 HTML 数据,提取出我们需要的天气预报信息,如日期、天气情况、温度和风力。pandas.DataFrame
: 最后,我们将这些数据存储在一个DataFrame
中,方便后续的可视化处理。
运行上述代码后,你将看到一个表格,包含未来几天的天气情况。是不是感觉数据已经一目了然?但我们还可以做得更好!接下来,我们将这些数据用图表展示出来。
第三步:天气数据可视化
为了让天气预报看起来更直观,我们可以使用 Python 中强大的 matplotlib
库来绘制温度变化的折线图。我们将提取出每一天的最低温度和最高温度,并展示它们随时间的变化。
可视化的源码
import matplotlib.pyplot as pltdef visualize_weather(weather_df):# 数据清洗:提取出温度中的最高温和最低温weather_df['temperature_min'] = weather_df['temperature'].apply(lambda x: int(x.split('/')[1].replace('℃', '').strip()))weather_df['temperature_max'] = weather_df['temperature'].apply(lambda x: int(x.split('/')[0].replace('℃', '').strip()))# 设置图表尺寸plt.figure(figsize=(10, 5))# 画出最低温度和最高温度的折线图plt.plot(weather_df['date'], weather_df['temperature_min'], label='最低温度 (°C)', marker='o', color='b')plt.plot(weather_df['date'], weather_df['temperature_max'], label='最高温度 (°C)', marker='o', color='r')# 添加图表标题和标签plt.title('未来几天天气预报')plt.xlabel('日期')plt.ylabel('温度 (°C)')plt.xticks(rotation=45)plt.legend()# 自动调整布局plt.tight_layout()# 显示图表plt.show()# 可视化天气数据
visualize_weather(weather_df)
代码解析:
- 数据清洗:我们从温度字段中分别提取出最低温度和最高温度,并将它们转换为数值类型,方便绘图。
- 绘图:使用
matplotlib
创建折线图,分别绘制最低温和最高温的变化趋势。 - 显示图表:我们设置了图表标题、标签和图例,使整个图表更加清晰易读。
最终效果
当你运行完所有代码后,系统将为你生成一张清晰的折线图,展示未来几天的最低温度和最高温度。你可以轻松地观察温度的波动,提前规划好出行的衣物搭配或户外活动。
总结
通过本文,我们学习了如何使用 Python 爬取天气预报数据,并使用 matplotlib
进行可视化展示。这一过程不仅适用于天气数据的展示,还可以广泛应用于其他数据爬取和分析任务。掌握这些技术,你就可以轻松搭建属于自己的数据分析和展示系统,让信息变得更加直观、生动。
现在,你只需每天运行一下这个脚本,就能及时获取最新的天气预报,提前为每一天做好准备!
相关文章:
Python 爬取天气预报并进行可视化分析
今天,我们就来学习如何使用 Python 爬取天气预报数据,并用数据可视化的方式将未来几天的天气信息一目了然地展示出来。 在本文中,我们将分三步完成这一任务: 使用 Python 爬取天气数据数据解析与处理用可视化展示天气趋势 让我…...
最左侧冗余覆盖子串
题目描述 给定两个字符串 s1 和 s2 和正整数 k,其中 s1 长度为 n1,s2 长度为 n2。 在 s2 中选一个子串,若满足下面条件,则称 s2 以长度 k 冗余覆盖 s1 该子串长度为 n1 k 该子串中包含 s1 中全部字母 该子串每个字母出现次数…...

性能测试-JMeter(2)
JMeter JMeter断言响应断言JSON断言断言持续时间 JMeter关联正则表达式提取器正则表达式正则表达式提取器 XPath提取器JSON提取器 JMeter属性JMeter录制脚本 JMeter断言 断言:让程序自动判断预期结果和实际结果是否一致 提示: -Jmeter在请求的返回层面有…...

芯课堂 | Synwit_UI_Creator(μgui)平台之图像处理篇
今天小编给大家介绍的是UI_Creator(μgui)平台下关于图像处理的选项。 UI_Creator(μgui)平台图片类控件有图像控件和分级图像控件,均包含以下选项: 1、消除水波纹: 由于16位真彩色(…...

QT C++ 软键盘/悬浮键盘/触摸屏键盘的制作
目录 1、前言 2、界面设计 3、英文、数字的输入 4、符号的输入 5、中文的输入 6、中文拼音库的选择 7、其他 8、结语 1、前言 使用QT C在带显示器的Linux系统 开发板上(树莓派等)编写操作UI界面时,很多时候都需要一个软键盘来输入文字…...

element-ui点击文字查看图片预览功能
今天做一个点击文字查看图片的功能,大体页面长这样子,点击查看显示对应的图片 引入el-image-viewer,点击的文字时候设置图片预览组件显示并传入图片的地址 关键代码 <el-link v-if"scope.row.fileList.length > 0" type&…...
SpringBoot集成Redis使用Cache缓存
使用SpringBoot集成Redis使用Cache缓存只要配置相应的配置类,然后使用Cache注解就能实现 RedisConfig配置 新建RedisConfig配置类 package com.bdqn.redis.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annota…...

【瑞萨RA8D1 CPK开发板】lcd显示
1.8寸lcd使用gpio模拟spi驱动 由于板子引出的接口限制,故使用gpio模拟spi驱动中景园的1.8寸lcd 1.77寸液晶屏 1.8寸TFT LCD SPI TFT彩屏st7735驱动128x160高清屏-淘宝网 (taobao.com) 使用RASC 的gpio配置 根据厂家提供的驱动文件移植 #define LCD_SCLK_Clr() g…...
算法收敛的一些证明方法与案例
证明一个算法收敛通常涉及多个角度,以下是一些常用的方法和示例: 一、方法 1. 数学归纳法 通过数学归纳法证明算法在每一步的输出结果都在收敛范围内。 示例:考虑一个递归算法,假设我们要证明它在每一步中输出的值逐渐接近目标…...

基于vue框架的蛋糕店网上商城740g7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:用户,店长,商品分类,商品信息,订单投诉,反馈信息 开题报告内容 基于Vue框架的蛋糕店网上商城开题报告 一、项目背景与意义 随着互联网技术的快速发展和普及,电子商务已成为现代商业的重要组成部分。蛋糕作为一种受欢迎的美…...

你真的了解Canvas吗--解密六【ZRender篇】
目录 📚入口 Circle - 图形 Group - 组 事件捕获 - 流程 step - 1 step - 2 总结 这篇文章我们讲讲Circle圆形,Group组的使用以及大家最熟悉又陌生的事件捕获和冒泡在ZRender中的实现,篇幅较长,且听我慢慢分析。 &#x…...
孤独相伴 - 结婚十七年
07年的今天,我和老公请假,去了新加坡的大使馆领证。 17年后的今天,此刻凌晨16分, 这是17年来我第一次这么早写结婚纪念,只是凑巧。 今天的心情莫名其妙。 此刻,两个词出现在我的脑海:孤独 &am…...
json-server,跨域
启动json-serer json-server --watch db.json 注意: db.json为json文件的名称,你自己的文件名叫什么,就启动对应的文件就可以了 启动json-server的时候,必须在你db.json所在的文件夹下进行启动 这样服务器就可以启动成功了&…...

【Conda】修复 Anaconda 安装并保留虚拟环境的详细指南
目录 流程图示1. 下载 Anaconda 安装程序2. 重命名现有的 Anaconda 安装目录Windows 操作系统Linux 操作系统 3. 运行新的 Anaconda 安装程序Windows 操作系统Linux 操作系统 4. 同步原环境使用 robocopy 命令(Windows)使用 rsync 命令(Linux…...

转行高薪 AI 产品经理,快速入门方法在此处
根据《2024年中国AI大模型场景探索及产业应用调研报告》,当前整体AI大模型行业仍然处于萌芽期,但市场规模增速较快。2023年我国AI大模型行业规模达到了147亿元,近三年复合增速高达114%。预计2024年,该市场规模将进一步增长至216亿…...
初识环境变量
初识环境变量 目录: 什么是环境变量常见的环境变量Linux中与环境变量的有关的命令如何获取环境变量环境变量的特点环境变量的作用 1.什么是环境变量 我们在Linux操作系统下,使用指令,比如ls,pwd,cd等等,可以直接使用,…...
成像基础 -- 景深计算
景深计算 景深(Depth of Field, DOF)指的是在摄影中,能够清晰成像的物体前后距离的范围。景深的大小取决于多个因素,包括焦距、光圈值、物距以及相机感光元件的尺寸。 1. 景深的主要参数 焦距( f f f)&a…...
Git中从dev分支恢复master分支
问题 需要从dev分支恢复master分支。之前搞错远程地址了,把master分支搞乱了,现在需要从dev分支恢复代码到master分支。 步骤 git checkout dev # 切换到 dev 分支 git branch -D master # 删除本地 master 分支 git checko…...
12.5 Linux_进程间通信_信号灯
概述 什么是信号灯: 信号灯也称为信号量,代表的是一类资源,其值表示系统中该资源的数量。 主要用途是实现进程、线程的同步。 什么是P/V操作: P操作就是申请资源,V操作就是释放操作。 信号灯的种类: …...

Linux——cp-mv-rm命令
cp命令 复制文件 cp test01.txt test02.txt 复制文件夹 cp -r hsy01 hsy02 mv命令 移动文件/文件夹 rm命令 删除文件 rm test.txt 删除文件夹(目录 rm -r hsy01 通配符 * 匹配任意内容 注意* 位置 强制删除-f root超级管理员...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...