Python爬取天气数据的实战教程

python爬取城市天气 目标网站:'爬取内容:34个省会近15天的天气数据。 阅读详情

包含编程籽料、学习路线图、爬虫代码、安装包等!【点击领取】

前言
在日常开发和学习中,我们经常需要获取天气数据来开发各种应用或进行分析。本文将介绍如何使用Python编写一个简单的天气数据爬虫,从公开的天气网站抓取所需信息。

准备工作
在开始之前,我们需要安装一些必要的Python库:

pip install requests beautifulsoup4 pandas

requests:用于发送HTTP请求

beautifulsoup4:用于解析HTML内容

pandas:用于数据处理和存储

选择目标网站
我们需要选择一个提供天气数据的网站。本文以中国天气网(http://www.weather.com.cn)为例。在实际操作中,请确保遵守网站的robots.txt协议和使用条款。

爬取单个城市天气数据

  1. 分析网页结构
    首先,我们打开中国天气网,搜索一个城市(如北京),观察URL结构:
    http://www.weather.com.cn/weather/101010100.shtml

其中101010100是北京的城市代码。我们可以通过查找其他城市的代码来获取不同城市的天气。

  1. 编写爬虫代码
import requests
from bs4 import BeautifulSoup
import pandas as pd

def get_weather(city_code):
    url = f"http://www.weather.com.cn/weather/{city_code}.shtml"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.encoding = 'utf-8'
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 获取城市名称
        city = soup.find('div', class_='crumbs fl').find_all('a')[-1].text
        
        # 获取7天天气数据
        weather_data = []
        items = soup.find_all('li', class_='sky')
        
        for item in items:
            date = item.find('h1').text
            weather = item.find('p', class_='wea').text
            temp = item.find('p', class_='tem').text.strip()
            wind = item.find('p', class_='win').find('i').text
            
            weather_data.append({
                '城市': city,
                '日期': date,
                '天气': weather,
                '温度': temp,
                '风向': wind
            })
            
        return weather_data
    
    except Exception as e:
        print(f"获取天气数据失败: {e}")
        return None

# 北京的城市代码
beijing_weather = get_weather('101010100')

if beijing_weather:
    df = pd.DataFrame(beijing_weather)
    print(df)
    # 保存为CSV文件
    df.to_csv('beijing_weather.csv', index=False, encoding='utf-8-sig')
  1. 代码解析
    我们定义了一个get_weather函数,接收城市代码作为参数

使用requests发送GET请求获取网页内容

使用BeautifulSoup解析HTML,提取所需数据

将提取的数据组织成字典列表

最后使用pandas将数据转换为DataFrame并保存为CSV文件

爬取多个城市天气数据
要获取多个城市的天气,我们需要知道各个城市的代码。这里我们预先准备一个城市代码字典:

city_codes = {
    '北京': '101010100',
    '上海': '101020100',
    '广州': '101280101',
    '深圳': '101280601',
    '杭州': '101210101'
}

def get_multiple_cities_weather(city_dict):
    all_weather_data = []
    
    for city_name, city_code in city_dict.items():
        print(f"正在获取{city_name}的天气数据...")
        weather_data = get_weather(city_code)
        if weather_data:
            all_weather_data.extend(weather_data)
        # 避免请求过于频繁,添加延迟
        time.sleep(2)
    
    if all_weather_data:
        df = pd.DataFrame(all_weather_data)
        df.to_csv('multi_cities_weather.csv', index=False, encoding='utf-8-sig')
        print("数据已保存为multi_cities_weather.csv")
        return df
    else:
        return None

# 使用示例
import time
weather_df = get_multiple_cities_weather(city_codes)
if weather_df is not None:
    print(weather_df.head())

数据可视化(可选)
我们可以使用matplotlib对获取的天气数据进行简单的可视化:

import matplotlib.pyplot as plt

# 假设我们已经有了包含多个城市天气数据的DataFrame
# 首先转换温度数据(原始数据可能是"12℃/-3℃"这样的格式)
def extract_max_temp(temp_str):
    try:
        return int(temp_str.split('/')[0].replace('℃', ''))
    except:
        return None

df['最高温度'] = df['温度'].apply(extract_max_temp)

# 绘制各城市最高温度对比
plt.figure(figsize=(10, 6))
for city in df['城市'].unique():
    city_data = df[df['城市'] == city]
    plt.plot(city_data['日期'], city_data['最高温度'], label=city)

plt.xlabel('日期')
plt.ylabel('最高温度(℃)')
plt.title('各城市最高温度对比')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

完整代码
以下是完整的代码示例:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import matplotlib.pyplot as plt

def get_weather(city_code):
    url = f"http://www.weather.com.cn/weather/{city_code}.shtml"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.encoding = 'utf-8'
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 获取城市名称
        city = soup.find('div', class_='crumbs fl').find_all('a')[-1].text
        
        # 获取7天天气数据
        weather_data = []
        items = soup.find_all('li', class_='sky')
        
        for item in items:
            date = item.find('h1').text
            weather = item.find('p', class_='wea').text
            temp = item.find('p', class_='tem').text.strip()
            wind = item.find('p', class_='win').find('i').text
            
            weather_data.append({
                '城市': city,
                '日期': date,
                '天气': weather,
                '温度': temp,
                '风向': wind
            })
            
        return weather_data
    
    except Exception as e:
        print(f"获取天气数据失败: {e}")
        return None

def get_multiple_cities_weather(city_dict):
    all_weather_data = []
    
    for city_name, city_code in city_dict.items():
        print(f"正在获取{city_name}的天气数据...")
        weather_data = get_weather(city_code)
        if weather_data:
            all_weather_data.extend(weather_data)
        # 避免请求过于频繁,添加延迟
        time.sleep(2)
    
    if all_weather_data:
        df = pd.DataFrame(all_weather_data)
        df.to_csv('multi_cities_weather.csv', index=False, encoding='utf-8-sig')
        print("数据已保存为multi_cities_weather.csv")
        return df
    else:
        return None

def visualize_temperature(df):
    # 转换温度数据
    def extract_max_temp(temp_str):
        try:
            return int(temp_str.split('/')[0].replace('℃', ''))
        except:
            return None
    
    df['最高温度'] = df['温度'].apply(extract_max_temp)
    
    # 绘制图表
    plt.figure(figsize=(10, 6))
    for city in df['城市'].unique():
        city_data = df[df['城市'] == city]
        plt.plot(city_data['日期'], city_data['最高温度'], 'o-', label=city)
    
    plt.xlabel('日期')
    plt.ylabel('最高温度(℃)')
    plt.title('各城市最高温度对比')
    plt.legend()
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

if __name__ == '__main__':
    city_codes = {
        '北京': '101010100',
        '上海': '101020100',
        '广州': '101280101',
        '深圳': '101280601',
        '杭州': '101210101'
    }
    
    weather_df = get_multiple_cities_weather(city_codes)
    
    if weather_df is not None:
        print(weather_df.head())
        visualize_temperature(weather_df)

结语
本文介绍了如何使用Python爬取天气数据的基本方法。通过这个例子,你可以学习到:

使用requests库发送HTTP请求

使用BeautifulSoup解析HTML内容

数据的提取、组织和存储

简单的数据可视化

最后:
希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利
最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。

包含编程资料、学习路线图、源代码、软件安装包等!【点击这里】领取!
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习

在这里插入图片描述

【爬虫实战】Python 自制天气预报程序!爬取全国天气网 🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 阅读详情

相关推荐

如何用python爬取天气预报,python爬虫爬取天气数据

大家好,本文将围绕python爬虫爬取天气数据讲解展开说明,如何用python爬取天气预报是一个很多人都想弄明白的事情,想搞清楚python爬虫爬取天气数据需要先了解以下几个事情。天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。

yang0728y的博客 7134

Python爬虫实战(基础篇)—9获取某个城市天气(附完整代码)

python爬取天气,python获取天气信息 爬虫天气信息

weixin_42636075的博客 7465

用python爬取历史天气数据

某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。 准备爬的历史天气 爬之前先分析url。左上有年份、月份的下拉选择框,按F12,进去看看能否找到真正的url: 54511-20161.js 很容易就找到了,左边是储存月度数据的js文件,右边是文件源代码,貌似json格式。 双击左边js文件,地址栏内出现...

huatmpa的博客 4621

使用python爬取天气信息(包括历史天气数据)

使用Python爬虫获取城市天气信息(包括历史天气数据) 使用python爬取历史天气数据 文章目录使用Python爬虫获取城市天气信息(包括历史天气数据)一、准备工作二、完整代码 一、准备工作 python环境3.6.7,需要用到的库主要有re,BeautifulSoup,requests以及pandas(用于保存数据) 目标网站为四川省绵阳市天气网站 分析目标网站的源码,部分源码如图: 可以看到,所有数据都被封装在class为thrui的标签下,所以我们可以使用bs解析数据后使用find_all函数

qq_44988175的博客 4万+

[python爬虫]爬取天气网全国所有县市的天气数据

[python爬虫]爬取天气网全国所有县市的天气数据访问URL解析数据保存数据 所要用到的库 import requests from lxml import etree import xlwt 访问URL 这里我们要用xpath来解析数据,所以我们返回的网页数据格式为html 没学过xpath的可以看看这篇博客,写的还是很详细的 xpath链接 https://blog.youkuaiyun.com/u013332124/article/details/80621638 def ask_url(url): # 伪

Lee12138111的博客 3162

python自动化获取城市天气

本文介绍了使用Python requests库自动获取城市天气的方法。通过wttr.in天气API接口,输入城市名称即可返回JSON格式的天气数据。示例代码演示了如何解析API响应,提取天气状况和温度信息。该方法简单易用,只需安装requests库并调用API即可实现天气查询功能,适合用于各种需要天气数据的自动化场景。

LDC,公众号【轻松学编程】 238

使用Python获取天气信息

使用python获取城市天气信息

qq_43755423的博客 7398

基于Python获取城市近7天天气预报

主要介绍了基于Python获取城市近7天天气预报,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Python爬取天气数据实战教程:从入门到精通

在数据获取与分析的时代,网络爬虫技术成为了数据采集的重要手段。本文将介绍如何使用Python爬取天气数据,并存储为结构化格式,适合数据分析、可视化等后续处理。本教程以中国天气网(http://www.weather.com.cn)为例,爬取城市天气预报数据。希望本教程能帮助你掌握Python爬取天气数据的基本技能,为进一步的数据分析项目打下基础。许多天气服务提供商提供API接口,比网页爬取更稳定可靠。requests库(发送HTTP请求)5.2 使用API获取天气数据(推荐)4.3 存储到数据库(可选)

Python_trys的博客 1607

2023年5月青少年软件编程Python等级考试四级真题(含答案和解析)

电子学会,2023年5月,青少年软件编程,Python等级考试,四级真题(含答案和解析)

m0_37554648的博客 904

LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程

本教程将介绍如何使用LangChain4j和Milvus向量数据库构建一个具备流式输出、会话管理、会话隔离和基于文档RAG检索能力的AI机器人。我们将使用阿里百炼模型作为LLM后端,并通过Docker部署Milvus向量数据库。创建Assistant接口,定义聊天服务:LangChain4j 中文文档 | LangChain4j 中文文档wiringMode :这个属性一般两种,一种是自动装配,我们这里选择手动配置。

2301_80014343的博客 1435

Python爬取北京未来七天天气预报

天气预报是我们日常生活中经常用到的数据。作为Python初学者,用爬虫抓取天气数据是一个非常经典且有趣的练手项目。本文将带你使用requests爬取【中国天气网】北京未来七天的天气预报,并教你如何将数据保存到 CSV 文件中。Requests(发送HTTP请求)BeautifulSoup4(解析HTML网页)

2301_80175386的博客 309

在ros里给机械臂加上夹爪和底盘后,控制真实机械臂

使用ur3_bringup 可以连接真实机械臂 使用官方的ur3_moveit_planning_execution.launch 可以对机械臂 moveit规划。 但是只有机械臂,没有夹爪。 官方如图: 我把原来的ur3_moveit_config 复制出来,修改 然后把ur3.xacro 等模型文件复制出来修改,修改完之后,有了夹爪,有了底盘。 规划组什么的使用moveit setup assistant 配置过了。 在rviz中可以笛卡尔空间规划了。 ...

超级菜 2716

手把手教你用Python爬取全球天气数据(附可视化技巧)

你是不是也好奇过不同城市的温差变化?(举个栗子🌰)最近帮朋友做商业选址分析,发现天气数据才是选址的隐藏大佬!今天咱们就用Python来挖一挖这个宝藏,全程保姆级教程,小白也能轻松上车!控制请求频率(别把人家服务器搞崩了)遵守robots协议(在网址后加/robots.txt查看)下次想看我扒哪个网站的数据?评论区告诉我!(悄悄说:电商价格监控系统已经在做了)

laowangpython的博客 438

CodeBuddy 接入 MCP,一键生成网站!

2024 年 11 月,Anthropic 公司搞了个挺有意思的新玩意 - Model Context Protocol(模型上下文协议)简称为 MCP 协议。简单来说,它就是给 AI 和各类工具数据之间搭了个标准化的”桥梁”,让开发者不用再为对接问题头疼了。mcp.so如下图所示,这是 mcp.so 网站中的 MCP Server。使用百度/高德地图分析旅线计算时间接 Puppeteer 自动操作网页使用 Github/Gitlab 让大模型接管代码仓库。

悟空聊架构的专栏 1946

Altium AD20的PCB板框绘制、定义板子形状、重新设置原点、放置尺寸标注

AD20的板框绘制与以前的版本不同,以前板框是在KeepOut层,而在AD20中没有这个层,绘制板框需要到机械层Mechanical1。 板框大小评估 首先进行板框大小评估。 工具 - 器件摆放 - 在矩形区域摆放。 之后通过鼠标框选矩形区域,元件会自动按照框选的范围进行摆放。这个操作可以重复多次,最后大致得出需要的板框尺寸。确定好后右键。 板框绘制,重新定义板子形状 点击下方的 Mechanical1,切换到机械层。放置线条,根据元件摆放来绘制PCB大致的形状,将元件完全包裹。

Mark_md的博客 10万+

如何用python爬取天气预报,python爬虫爬取天气预报

本项目包括四个核心部分:数据爬取、数据存储、数据分析和数据可视化python画四瓣花。首先,利用Python编写的网络爬虫从专业的历史天气网站上爬取大连市从2011年至2023年的天气数据,包括日期、最高气温、最低气温和天气状况等信息。爬取过程中应用了requests库来模拟浏览器请求和lxml库来解析HTML文档,确保了数据的准确性和完整性。接着,将爬取到的数据存储在两个CSV文件中,并利用pymysql库将数据导入MySQL数据库,便于后续的数据处理和分析。

Rtee1的博客 1440

【QGIS】利用“创建网格”功能实现区域等距分割与坐标转换实战

本文详细介绍了如何在QGIS中使用“创建网格”工具实现区域等距分割。通过实战演示,将北京市行政区划切割为150米正方形网格,并重点讲解了关键步骤:选择投影坐标系EPSG:3857以确保网格尺寸精确,以及将结果转换为常用的WGS84经纬度坐标。文章还涵盖了进阶技巧与常见问题解决方案,帮助用户高效完成空间网格化分析任务。

weixin_29232507的博客 95

【爬虫实战】——Python爬取天气信息_天气数据爬虫数据

在数据分析和信息获取领域,天气数据是一个常见且重要的数据源。通过Python编程,我们可以高效地爬取天气数据,用于各种应用场景,如气象分析、旅行规划、农业决策等。Python提供了丰富的库和工具,使得这一过程变得相对简单。本文将介绍如何使用Python爬取天气数据,包括所需的库、API接口的选择、数据请求与解析等关键步骤。通过Python编程,我们可以高效地爬取天气数据,并将其用于各种应用场景。

2301_78150559的博客 1万+

piamon实战-- 如何使用 Paimon 的 Java API 实现数据的点查

点查(Point Lookup)是指通过 ​​唯一键(Primary Key)​​ 快速定位并返回单条或少量数据的查询模式。例如:根据用户 ID 查询用户信息、根据订单号查询订单详情等。点查的核心诉求是 ​​低延迟​​ 和 ​​高吞吐​​,适用于实时风控、在线分析等场景。​​定义主键表结构​​,优化数据分布。​​构建过滤条件​​,使用指定查询键。​​执行查询并处理结果​​,结合流式更新实现实时查询。

阿华田的博客 531

2024美团秋招硬件开发笔试真题及答案解析

在 Linux 内核的网络设备驱动中,数据链路层的功能通常由网络协议栈的低层(如以太网驱动)实现,而不是作为网络设备驱动的一个独立层次。在 FreeRTOS 中,任务通知(Task Notifications)是一种轻量级的事件传递机制,用于在任务之间或任务与中断之间传递信号。小美正在开发一个简单的密码生成器,其中一个功能是将输入的字符串中的所有字母按字母顺序循环前移一位(即 'a' 变为 'z','B' 变为 'A',以此类推)。它包含了网络设备的各种参数和方法,用于管理网络设备的初始化、配置和操作。

XU157303764的博客 1676

Python爬取天气数据及可视化分析!

天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、空气质量等成为关注的焦点。本次使用python中requests和BeautifulSoup库对中国天气网当天和未来14天的数据进行爬取,保存为csv文件,之后用matplotlib、numpy、pandas对数据进行可视化处理和分析,得到温湿度度变化曲线、空气质量图、风向雷达图等结果,为获得未来天气信息提供了有效方法。

Python84310366的博客 8867

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

python爬取天气数据

说明:寒假任务是做一个带UI界面的天气预报软件,先上最终结果图。 其中用到的知识有:python网络爬虫、python的xlwt和xlwd库的使用,PyQt5的使用。 这里分享一下完成过程: 制作UI界面前先获取城市天气数据 一.爬取天气数据(有网) 第一步:找到合适的url链接 第二步:用python的urllib2库爬取对应城市的天气数据。 第三步:打印天气数据 有了思路,开始打代码: im...

Henry41132220011的博客 5819

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python爬取城市天气数据,并作数据可视化

本文介绍了如何使用Python爬虫和数据可视化工具,爬取多个城市的天气数据并进行可视化分析。首先,使用Python爬虫从网站上获取多个城市的天气数据,并将数据存储到本地文件中。然后,使用Pandas库读取数据文件,并使用Matplotlib和Seaborn库进行数据可视化分析,包括线性图、热力图、散点图等。最后,根据分析结果进行总结和展望。 通过本文的学习,读者可以了解到如何使用Python进行数据爬取和可视化分析,从而掌握数据分析的基本技能,并应用到实际问题中。同时,也可以了解到如何使用Python库

m0_61981943的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Python爬虫实战-爬取历史天气数据

最近项目需要对合肥市历史天气数据进行爬取,分析了几个天气数据网站,最终选择天气后报网站. 将实现过程遇到的问题以及下来,供以后参考。 步骤分析 这里我使用的是Python中的requests库BeautifulSoup库进行爬取,自己在实现的过程中主要可分为以下几个大步骤。 1.熟悉requests库和BeautifulSoup的使用: requests主要是与HTTP请求相关的库,在我们的爬虫中...

litexy 1万+
上一篇: 2025超详细专业版PyCharm IDE安装环境配置完整版教程,看这一篇就足够了!
下一篇: Python requests库详解:轻松发送HTTP请求的终极指南
Python_trys
博客等级 码龄2年 4369粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值