Python 爬取天气预报并进行可视化分析

今天,我们就来学习如何使用 Python 爬取天气预报数据,并用数据可视化的方式将未来几天的天气信息一目了然地展示出来。

在本文中,我们将分三步完成这一任务:

  1. 使用 Python 爬取天气数据
  2. 数据解析与处理
  3. 用可视化展示天气趋势

让我们开始吧!

第一步:准备工作

在正式开始之前,我们需要安装一些常用的 Python 库。这些库可以帮助我们更高效地获取数据、解析内容以及进行数据可视化。

首先,打开终端,安装以下库:

pip install requests
pip install beautifulsoup4
pip install matplotlib
pip install pandas

各库介绍:

  • requests: 用来发送 HTTP 请求,获取网页数据。
  • beautifulsoup4: 用于解析 HTML 数据,提取网页中的有用信息。
  • matplotlibpandas: 用于处理数据,并创建漂亮的可视化图表。

第二步:爬取天气预报数据

现在,让我们编写 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)

说明:

  1. requests.get(url): 我们首先使用 requests 库向天气网站发送 HTTP 请求,并获取返回的网页内容。
  2. BeautifulSoup: 然后用 BeautifulSoup 来解析 HTML 数据,提取出我们需要的天气预报信息,如日期、天气情况、温度和风力。
  3. 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)

代码解析:

  1. 数据清洗:我们从温度字段中分别提取出最低温度和最高温度,并将它们转换为数值类型,方便绘图。
  2. 绘图:使用 matplotlib 创建折线图,分别绘制最低温和最高温的变化趋势。
  3. 显示图表:我们设置了图表标题、标签和图例,使整个图表更加清晰易读。

最终效果

当你运行完所有代码后,系统将为你生成一张清晰的折线图,展示未来几天的最低温度和最高温度。你可以轻松地观察温度的波动,提前规划好出行的衣物搭配或户外活动。

总结

通过本文,我们学习了如何使用 Python 爬取天气预报数据,并使用 matplotlib 进行可视化展示。这一过程不仅适用于天气数据的展示,还可以广泛应用于其他数据爬取和分析任务。掌握这些技术,你就可以轻松搭建属于自己的数据分析和展示系统,让信息变得更加直观、生动。

现在,你只需每天运行一下这个脚本,就能及时获取最新的天气预报,提前为每一天做好准备!

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

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

相关文章

【C++】第五节:内存管理

1、C/C内存分布 看下面一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(s…

在 Oracle 中利用 `ORA_HASH` 高效处理大规模数据:并行分片的最佳实践20241008

在 Oracle 中利用 ORA_HASH 高效处理大规模数据:并行分片的最佳实践 在数据处理规模越来越庞大的今天,如何高效地处理数百万甚至数千万条记录成为数据库性能优化的重要课题。面对这种挑战,单线程处理数据显然会成为瓶颈。通过使用多线程并行…

与C++内存管理和STL简介的爱恨情仇

本文 1.C/C内存分布2.C语言中动态内存管理方式:malloc/calloc/realloc/free总结 3.C内存管理方式new/delete操作内置类型new和delete操作自定义类型 4.operator new与operator delete函数(重要点进行讲解)5.new和delete的实现原理内置类型自定…

制造业DT数字化之生产制造业务建模

一、工厂建模为何物? 对制造业人员(人)、设备(机)、材料(料)、工艺流程(法)、工厂环境(环)数据化管理的过程就叫工厂建模。 二、制造建模有哪几大…

HTTP 和 WebSocket

目录 HTTP是什么HTTP局限性(HTTP1.1)请求和响应HTTP的主要特点:HTTP版本: HTTP与TCP关系数据封装传输过程1. **协议层次模型**:2. **封装过程**:1. **应用层(HTTP)**:2. …

【操作系统】引导(Boot)电脑的奇妙开机过程

🌹😊🌹博客主页:【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见:【C语言专项】 目录 什么是操作系统的引导? 操作系统的引导(开机过程) Windows操作系…

QD1-P2 HTML 编辑器:HBuilderX

本节学习: HTML课程内容介绍HBuilderX编辑器的使用 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p2 HTML 内容 基础语法 标签整体架构DOCTYPE 常用标签 标题和水平线段落和换行列表div 和 span格式化标签图片超链接标签表格表单字符实体 编辑器 HBuilder…

设计测试用例的方法

目录 1、等价类 2、边界值 3、场景法 4、正交表法 5、设计正交表 6、判定表法 7、错误猜想法 1、等价类 在测试中选取一些数据作为等价类进行测试,如果测试通过,就代表测试通过,可以用少量代表性的测试数据取得较好的测试结果。 等价类…

Oracle EBS中 电子文档归档 模块的财务流程概览

Oracle E-Business Suite (EBS) 提供了电子文档归档(Electronic Document Archiving, EDA)功能,它是一个重要的组成部分,帮助组织有效地管理和存储大量的业务文档。虽然在提供的资料中没有直接提及电子文档归档模块的财务流程概览…

智能扭矩系统在轨道交通行业的应用_SunTorque

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。一站式数智工厂解决方案服务商】 在现代轨道交通领域,安全、高效和可靠性是至关重要的考量因素。智能扭矩系统作为一项先进的技术,正逐渐在轨道交通行业中展现出其重要的应用…

【原创】java+springboot+mysql劳动教育网系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Vscode+Pycharm+Vue.js+WEUI+django火锅(四)WEUI和Vue整合

Vue移动端的UI库,其实网上推荐的排行榜上看起来都好,尤其是Vuetify 特别有眼缘,因为看到了三个字“易上手”。 但是因为之前系统的Django开发,便于企业微信中访问选用了WEUI,所以还是继续使用WEUI的方案。1.安装 PS C:\website\my…

使用Milvus和Llama-agents构建更强大的Agent系统

代理(Agent)系统能够帮助开发人员创建智能的自主系统,因此变得越来越流行。大语言模型(LLM)能够遵循各种指令,是管理 Agent 的理想选择,在许多场景中帮助我们尽可能减少人工干预、处理更多复杂任…

golang获取当天最小的时间,以DateTime的string格式返回

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

@RequestParam @PathVirable @RequestBody @ApiParam的区别

RequestParam 最常用用value指定参数名字,required字段指定参数是否必须,默认为true,当requiredfalse时,一般配合着defaultValue"xx"使用对应的url是这样的: https://localhost/requestParam/test?key1va…

通俗易懂的人工智能(AI)入门教程

欢迎来到人工智能(AI)的世界!无论您是对AI感到好奇,还是希望在未来的职业中应用AI技术,这篇教程将为您提供一个清晰的入门指南。我们将以简单易懂的方式,带您了解AI的基本概念、发展历程、主要分支及其应用…

C++与Java Web开发的对比分析:优势与差异

目录 1. 引言 2. C的开发优势与特点 2.1 高性能与硬件控制 2.2 面向对象与多范式支持 2.3 跨平台能力 3. Java Web的开发优势与特点 3.1 跨平台与广泛的企业应用 3.2 丰富的生态系统与工具支持 3.3 安全性与稳定性 4. C与Java Web的差异对比 4.1 性能与效率 4.2 开发…

基于go开发的终端版即时通信系统(c-s架构)

项目架构图 类似一个聊天室一样 整体是一个客户端和服务端之间的并发多线程网络通信,效果可以翻到最后面看。 为了巩固基础的项目练手所以分为9个阶段进行迭代开发 版本⼀:构建基础Server 新建一个文件夹就叫golang-IM_system 第一阶段先将server的大…

3303. 第一个几乎相等子字符串的下标

Powered by:NEFU AB-IN Link 文章目录 3303. 第一个几乎相等子字符串的下标题意思路代码 3303. 第一个几乎相等子字符串的下标 题意 给你两个字符串 s 和 pattern 。 如果一个字符串 x 修改 至多 一个字符会变成 y ,那么我们称它与 y 几乎相等 。 Create the v…

学习之偏函数

“”" 1、什么是偏函数? 在Python的内置模块 functoo1s提供了很多有用的功能,其中一个就是偏函数(partial )。 2、偏函数有什么用? 当函数的参数个数太多,需要简化时,使用 functoo1s.rtia1可以创建一个新的函数,这个新函数…