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

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

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

前言
在数据获取与分析的时代,网络爬虫技术成为了数据采集的重要手段。本文将介绍如何使用Python爬取天气数据,并存储为结构化格式,适合数据分析、可视化等后续处理。本教程适合Python初学者和有一定基础的开发者。

一、准备工作
1.1 所需工具
Python 3.x

requests库(发送HTTP请求)

BeautifulSoup4或lxml(HTML解析)

pandas(数据处理)

开发环境(推荐PyCharm、VS Code或Jupyter Notebook)

1.2 安装依赖库

pip install requests beautifulsoup4 pandas lxml

二、选择目标网站
本教程以中国天气网(http://www.weather.com.cn)为例,爬取城市天气预报数据。

注意:在实际爬取前,请务必:

查看目标网站的robots.txt文件

遵守网站的使用条款

设置合理的爬取间隔,避免对服务器造成过大压力

三、基础爬取实现
3.1 获取网页内容

import requests
from bs4 import BeautifulSoup

# 定义目标URL(以北京为例)
url = "http://www.weather.com.cn/weather/101010100.shtml"

# 设置请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 发送HTTP请求
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'  # 设置编码

# 检查请求是否成功
if response.status_code == 200:
    html = response.text
else:
    print(f"请求失败,状态码:{response.status_code}")

3.2 解析天气数据

# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html, 'lxml')

# 查找天气数据所在的标签
weather_data = []
days = soup.select('.t > li')

for day in days:
    # 提取日期
    date = day.select_one('.date').get_text(strip=True)
    
    # 提取天气状况
    weather = day.select_one('.wea').get_text(strip=True)
    
    # 提取温度
    temp = day.select_one('.tem').get_text(strip=True).replace('\n', '')
    
    # 提取风向风力
    wind = day.select_one('.win > em > span')['title']
    wind_force = day.select_one('.win > i').get_text(strip=True)
    
    weather_data.append({
        '日期': date,
        '天气': weather,
        '温度': temp,
        '风向': wind,
        '风力': wind_force
    })

print(weather_data)

四、数据存储与处理
4.1 使用pandas处理数据

import pandas as pd

# 将数据转换为DataFrame
df = pd.DataFrame(weather_data)

# 数据清洗
df['最高温度'] = df['温度'].str.extract(r'/(\d+)℃')
df['最低温度'] = df['温度'].str.extract(r'(\d+)℃/')

# 删除原始温度列
df.drop('温度', axis=1, inplace=True)

print(df.head())

4.2 存储为CSV文件

# 保存为CSV文件
df.to_csv('weather_data.csv', index=False, encoding='utf-8-sig')

print("天气数据已保存为weather_data.csv")

4.3 存储到数据库(可选)
如果需要存储到MySQL数据库:

import pymysql
from sqlalchemy import create_engine

# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@localhost:3306/weather_db')

# 存储到数据库
df.to_sql('weather', con=engine, if_exists='replace', index=False)

print("天气数据已存储到数据库")

五、进阶技巧
5.1 多城市天气爬取

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

all_weather_data = []

for city, code in city_codes.items():
    url = f"http://www.weather.com.cn/weather/{code}.shtml"
    response = requests.get(url, headers=headers)
    response.encoding = 'utf-8'
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'lxml')
        days = soup.select('.t > li')
        
        for day in days:
            date = day.select_one('.date').get_text(strip=True)
            weather = day.select_one('.wea').get_text(strip=True)
            temp = day.select_one('.tem').get_text(strip=True).replace('\n', '')
            wind = day.select_one('.win > em > span')['title']
            wind_force = day.select_one('.win > i').get_text(strip=True)
            
            all_weather_data.append({
                '城市': city,
                '日期': date,
                '天气': weather,
                '温度': temp,
                '风向': wind,
                '风力': wind_force
            })
    else:
        print(f"{city}天气数据获取失败")

# 转换为DataFrame并保存
multi_city_df = pd.DataFrame(all_weather_data)
multi_city_df.to_csv('multi_city_weather.csv', index=False, encoding='utf-8-sig')

5.2 使用API获取天气数据(推荐)
许多天气服务提供商提供API接口,比网页爬取更稳定可靠。例如:

import requests

# 使用和风天气API示例(需要申请API key)
api_key = "your_api_key"
location = "101010100"  # 北京的城市代码
url = f"https://devapi.qweather.com/v7/weather/7d?location={location}&key={api_key}"

response = requests.get(url)
if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print("API请求失败")

六、反爬虫策略应对
6.1 常见反爬措施
User-Agent检测:我们已经设置了User-Agent

请求频率限制:添加延时

IP封锁:使用代理IP

验证码:需要更复杂的处理

6.2 添加随机延时

import time
import random

# 在请求之间添加随机延时
time.sleep(random.uniform(1, 3))  # 1-3秒随机延时

6.3 使用代理IP

proxies = {
    'http': 'http://your_proxy_ip:port',
    'https': 'https://your_proxy_ip:port'
}

response = requests.get(url, headers=headers, proxies=proxies)

七、完整代码示例

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

def get_weather_data(city_code, city_name):
    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/91.0.4472.124 Safari/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.encoding = 'utf-8'
        
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'lxml')
            days = soup.select('.t > li')
            weather_data = []
            
            for day in days:
                date = day.select_one('.date').get_text(strip=True)
                weather = day.select_one('.wea').get_text(strip=True)
                temp = day.select_one('.tem').get_text(strip=True).replace('\n', '')
                wind = day.select_one('.win > em > span')['title']
                wind_force = day.select_one('.win > i').get_text(strip=True)
                
                weather_data.append({
                    '城市': city_name,
                    '日期': date,
                    '天气': weather,
                    '温度': temp,
                    '风向': wind,
                    '风力': wind_force
                })
            
            return weather_data
        else:
            print(f"{city_name}天气数据获取失败,状态码:{response.status_code}")
            return None
    except Exception as e:
        print(f"获取{city_name}天气数据时出错:{str(e)}")
        return None

def main():
    city_codes = {
        '北京': '101010100',
        '上海': '101020100',
        '广州': '101280101',
        '深圳': '101280601'
    }
    
    all_weather_data = []
    
    for city, code in city_codes.items():
        print(f"正在获取{city}的天气数据...")
        weather_data = get_weather_data(code, city)
        if weather_data:
            all_weather_data.extend(weather_data)
        time.sleep(random.uniform(1, 3))  # 随机延时
    
    if all_weather_data:
        df = pd.DataFrame(all_weather_data)
        # 数据清洗
        df['最高温度'] = df['温度'].str.extract(r'/(\d+)℃')
        df['最低温度'] = df['温度'].str.extract(r'(\d+)℃/')
        df.drop('温度', axis=1, inplace=True)
        
        # 保存数据
        df.to_csv('multi_city_weather.csv', index=False, encoding='utf-8-sig')
        print("天气数据已保存为multi_city_weather.csv")
    else:
        print("未能获取任何天气数据")

if __name__ == "__main__":
    main()

八、总结
本文介绍了使用Python爬取天气数据的基本流程,包括:

发送HTTP请求获取网页内容

使用BeautifulSoup解析HTML

提取并清洗所需数据

存储为CSV或数据库

应对反爬虫策略

希望本教程能帮助你掌握Python爬取天气数据的基本技能,为进一步的数据分析项目打下基础。

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

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

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

在这里插入图片描述

如何用python爬取天气预报,基于python网络爬虫天气 (补充,也可以在软件通常都有的“关于”信息中找到)举个例子:我们移动鼠标到层次500hPa,就可以自动定位到500hPa层级按钮对应的HTML元素了,查看到它的属性,可以看到500hPa这个按钮对应的页面元素是link文字。Selenium对网页的控制是基于各种HTML结构元素的,在使用过程中,对于网页各类元素的定位是基础,只有准确抓取到对应元素才能进行后续的自动化控制。Selenium是一个Web的自动化(测试)工具,它可以根据我们的指令,让浏览器执行自动加载页面,获取需要的数据等操作。 阅读详情

相关推荐

Python获取天气数据 并做可视化解读气象魅力

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章前几天的长沙,白天大太阳,晚上下暴雨一点也琢磨不透天气老人家它的想法顺便哔哔一点生活小插曲:前几天的时候,我出门,家里的几扇窗户开着在透气等我十一点回到家,我的客厅和厨房进了一地的水太让人伤心了,好啦,话不多说!让我们进入正题吧用python对天气数据进行采集,并作可视化图表。

weixin_62853513的博客 4127

python 爬虫爬取天气

python 爬虫

Katherine1029的博客 1万+

[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爬虫-爬取天气信息(1)

接下来我将通过三篇文章介绍如何通过天气网 (weather.com.cn)爬取天气信息。本文将介绍爬取地区名称与地区ID的对应关系,为爬取天气信息打下基础。

一只程序猿子的博客 3895

爬取全国任意省份天气数据详细步骤

前几天河南天天下雨,在家憋得难受就尝试写一个爬取全国天气数据的爬虫,在此分享详细过程。 (图一) 打开上图所标记的页面得到Windows官网的天气数据(图一) (图二) 老样子,此处我们按下F12打开开发者模式(此处用的Edge浏览器演示)(图三),为了直观了解服务器对我们的请求是如何响应的,可以在搜索位置处随便输入一个城市(此处输入我老家漯河为例),输入城市后点击搜索,此时注意看开发者模式下,服务器发送的文件,我们的目标数据就在这些文件中。在打开的开发者模式栏中,慢慢寻找所需要的数据(比如..

Ai_Puselen的博客 4352

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

首先查看中国天气网的网址:http://www.weather.com.cn/weather/101280701.shtml这里就访问本地的天气网址,如果想爬取不同的地区只需修改最后的101280701地区编号即可,前面的weather代表是7天的网页,weather1d代表当天,weather15d代表未来14天。这里就主要访问7天和14天的中国天气网。采用方法,请求网页,如果成功访问,则得到的是网页的所有字符串文本。这就是请求过程。 提取有用信息 这里采用BeautifulSoup库对刚刚获取的字

m0_54850825的博客 1911

【Python爬虫实战入门】:全球天气信息爬取

requests模块官方文档requests 是 Python 编程语言中一个常用的第三方库,它可以帮助我们向 HTTP 服务器发送各种类型的请求,并处理响应。向 Web 服务器发送 GET、POST 等请求方法;在请求中添加自定义标头(headers)、URL 参数、请求体等;自动处理 cookies;返回响应内容,并对其进行解码;处理重定向和跳转等操作;检查响应状态码以及请求所消耗的时间等信息。BeautifulSoup4模块官方文档。

书山有路勤为径,学海无涯苦作舟。 3668

altium room 布局_ALtium 16相同重复模块PCB布局,复制布局走线

自己做了实际工程以后发现PCB器件名字后缀太长了,所以文章最后写了一下后缀的调整方法。第一种方法:1、建立子原理图如下,文件名CANM 2、之后新建一个顶层文件,文件名TOP,之后design—create sheet symbol form sheet or hdl。选择CANM,并放置到TOP中,如下 3、由于我们要多次调用CANM所以使用repeat命令修改如下: 4、之后根据自己的定义,连...

weixin_39609573的博客 5749

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

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

2301_78150559的博客 1万+

绕过卡巴斯基通过RPC控制lsass注入DLL

参考国外的XPN以及3gstudent大佬的文章: https://blog.youkuaiyun.com/xiangshen1990/article/details/104872566 https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0 原理:正常的ssp扩展(dll)可以加载到lsass进程中去,比如kerberos验证都是通...

2ed 3524

PyTorch复现PSMNet踩坑全记录:从环境配置到KITTI数据集训练

本文详细记录了使用PyTorch复现CVPR经典立体匹配模型PSMNet的全过程,从环境配置到KITTI数据集训练,特别针对2023年主流软硬件环境中的常见问题提供解决方案。文章重点介绍了PSMNet的金字塔池化模块和堆叠沙漏结构,帮助研究者和工程师快速实现工业级深度估计,节省大量试错时间。

weixin_30897233的博客 328

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

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

Python84310366的博客 8867

08-SD卡-TF卡硬件电路设计

SD卡-TF卡硬件电路设计

weixin_66510961的博客 8260

python爬取天气数据

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

Henry41132220011的博客 5819

十七、SAP-采购订单(STO)

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 2068

stop pin/ignore pin/exclude pin/float pin

stop pin、ignore pin、exclude pin、float pin的区别

m0_61544122的博客 7289

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

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

litexy 1万+

网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)

目录 ICMP隧道 使用ICMP搭建隧道(PingTunnel) 使用ICMP搭建隧道(Icmptunnel) ICMP隧道 ICMP隧道简单实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相...

谢公子的博客 6696

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

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

m0_61981943的博客 1万+

LVGL core group焦点分组管理(lv_group.c)

lv_group_t是用于焦点管理的,将需要获取焦点的对像加入到同一个分组内,再将其通过挂到指定的事件驱动中,就可以控制焦点了。而被加入的对象又可以通过焦点状态事件和事件来控制对象的焦点逻辑了。创建好的分组通过接口挂事件驱动中,这样就可以指定一个自定义的焦点分组了。;) {if(!} }友情提示:无论是接口还是都是单例的,即被设置后前一个被设置的值就失效了;此方案可以保证焦点的唯一 性,但也一定要记住要在适合的位置设置回来,以防丢失焦点。

Bigan(安)的博客 3907

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

在日常开发中,爬取天气数据是一个常见的需求,无论是为了个人项目还是商业应用。本文将详细介绍如何使用Python爬取天气数据,并保存为结构化格式。我们将以中国天气网为例,讲解完整的爬虫实现过程。我们以中国天气网(http://www.weather.com.cn)为例。BeautifulSoup4(解析HTML)requests库(发送HTTP请求)打开中国天气网,搜索目标城市(如北京)检查网页源代码,找到天气数据所在位置。3.1 获取网页内容。3.2 解析天气数据。5.2 添加异常处理。

Python_trys的博客 997

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python基础教程——爬取天气数据及可视化分析(附源码)

为了爬取天气数据,我们通常需要一个支持天气API的服务。免费的天气API如OpenWeatherMap是一个很好的选择。以下,我将提供一个简单的Python示例,使用requests库来从OpenWeatherMap API获取天气数据,并使用json库来解析返回的JSON数据。

2301_78096295的博客 3787

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Python数据结构深入讲解:列表、字典、元组,彻底搞懂!
下一篇: Python安装Matplotlib库的5种方法详解
Python_trys
博客等级 码龄2年 4369粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值