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

前言:天气数据里的秘密

你是不是也好奇过不同城市的温差变化?(举个栗子🌰)最近帮朋友做商业选址分析,发现天气数据才是选址的隐藏大佬!今天咱们就用Python来挖一挖这个宝藏,全程保姆级教程,小白也能轻松上车!


一、前期准备(工具包别装错!)

1.1 三剑客安装

打开你的终端/cmd,三行代码搞定基础环境:

pip install requests  # 网络请求神器(必装!)
pip install bs4       # 网页解析利器(别漏装!)
pip install pandas    # 数据处理专家(后期有大用)

1.2 目标网站分析

咱们以「中国天气网」为例(官网地址自己搜),按F12打开开发者工具,重点看这两个地方:

  • Network面板里的XHR请求(藏着真正的数据接口)
  • Elements面板的HTML结构(找数据存放位置)

关键发现:天气数据实际是通过Ajax动态加载的,直接找接口比解析HTML更高效!(划重点)


二、实战代码分解(跟着敲就对了)

2.1 伪装浏览器请求头

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Referer': 'http://www.weather.com.cn/'
}

注意:这个User-Agent已经处理过隐私信息,实际使用时建议更新为最新版本(右键浏览器-检查-网络请求里复制)

2.2 构造请求参数

以北京为例:

params = {
    'areaid': '101010100',  # 城市编码表我放文末
    'type': 'forecast',
    'date': '20231120'
}

2.3 发送请求+解析数据

import requests
from bs4 import BeautifulSoup

response = requests.get(
    url='http://d1.weather.com.cn/dingzhi/101010100.html',
    headers=headers,
    params=params
)
response.encoding = 'utf-8'  # 解决中文乱码问题
data = response.json()       # 直接转json格式

三、数据清洗技巧(避坑指南)

3.1 异常值处理

遇到温度数据出现"999"这样的离谱值?用pandas轻松过滤:

import pandas as pd

df = pd.DataFrame(data['data'])
df = df[df['temp'].between(-50, 50)]  # 过滤异常温度

3.2 时间格式转换

原始数据的时间戳看着头疼?试试这个:

df['date'] = pd.to_datetime(df['date'], unit='ms')  # 毫秒转日期

四、可视化炫技时刻

4.1 折线图绘制

import matplotlib.pyplot as plt

plt.style.use('ggplot')  # 启用高级样式
df.plot(x='date', y='temp', kind='line')
plt.title('北京近一周温度变化')
plt.savefig('weather.png', dpi=300)  # 保存高清图

4.2 温度分布图

import seaborn as sns

sns.kdeplot(df['temp'], shade=True)
plt.xlabel('温度区间')
plt.ylabel('出现概率')

五、实战经验分享(血泪教训)

5.1 反爬破解思路

  • 随机延时设置:time.sleep(random.uniform(1,3))
  • 代理IP池搭建(需要另购服务)
  • 请求头轮换策略(准备多个UA轮流用)

5.2 数据存储方案

推荐MongoDB存储非结构化数据:

from pymongo import MongoClient

client = MongoClient('localhost', 27017)
db = client['weather_db']
collection = db['beijing']
collection.insert_many(df.to_dict('records'))

六、城市编码表(私藏资源)

城市编码
北京101010100
上海101020100
广州101280101
深圳101280601

(完整表格约2000+城市编码,需要的同学评论区留言~)


结语:爬虫的正确打开方式

虽然咱们今天实现了天气数据抓取,但切记遵守这两个原则:

  1. 控制请求频率(别把人家服务器搞崩了)
  2. 遵守robots协议(在网址后加/robots.txt查看)

下次想看我扒哪个网站的数据?评论区告诉我!(悄悄说:电商价格监控系统已经在做了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值