文章目录
一、为什么需要天气数据?(不只是为了看天气预报!)
最近在帮朋友做农业数据分析项目时(没想到吧!),意外发现获取历史天气数据竟然这么麻烦!市面上的天气API要么收费,要么限制调用次数(钱包君瑟瑟发抖)。这时候Python爬虫简直就是救命稻草!(敲黑板:合法合规前提下使用哦)
二、准备工作(超级简单!)
1. 安装必要库(已经有的可以跳过)
pip install requests beautifulsoup4 pandas
2. 目标网站分析(以中国天气网为例)
打开浏览器开发者工具(F12),重点观察:
- 城市选择器的HTML结构(class=“citybox”)
- 温度数据的存放位置(class=“tem”)
- 日期标签的特征(class=“date”)
三、实战代码手把手教学(跟着敲就对了!)
步骤1:基础爬取框架
import requests
from bs4 import BeautifulSoup
url = 'http://www.weather.com.cn/weather/101020100.shtml'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content.decode('utf-8'), 'html.parser')
步骤2:精准提取数据(核心代码!)
weather_list = []
for item in soup.select('.t.clearfix > li'):
date = item.select_one('.date').get_text()
weather = item.select_one('.wea').get_text()
temp = item.select_one('.tem').get_text().replace('\n', '')
wind = item.select_one('.win > em > span')['title']
weather_list.append({
'日期': date,
'天气状况': weather,
'温度': temp,
'风向': wind
})
步骤3:数据存储(两种方式任选)
# CSV存储(推荐!)
import pandas as pd
df = pd.DataFrame(weather_list)
df.to_csv('shanghai_weather.csv', index=False)
# Excel存储(需要安装openpyxl)
# pip install openpyxl
df.to_excel('weather_data.xlsx', engine='openpyxl')
四、让数据会说话(可视化技巧)
1. 温度变化折线图
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(df['日期'], df['温度'].str.extract('(\d+)').astype(int), marker='o')
plt.title('上海近7日温度变化趋势')
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.grid(True)
plt.show()
2. 天气状况统计(柱状图)
weather_counts = df['天气状况'].value_counts()
plt.bar(weather_counts.index, weather_counts.values)
plt.xticks(rotation=45)
plt.title('天气类型分布')
plt.ylabel('出现天数')
plt.tight_layout()
五、避坑指南(血泪经验!)
- 反爬虫机制:有些网站会检测User-Agent,记得随机更换(可以用fake_useragent库)
- IP限制:频繁访问会被封IP,建议:
- 设置请求间隔(time.sleep(2))
- 使用代理IP池(进阶玩法)
- 数据清洗:注意处理缺失值和异常符号(比如温度里的"℃"符号)
- 法律红线:务必遵守网站的robots.txt协议!
六、还能玩出什么花样?(扩展思路)
- 搭建定时爬虫任务(用APScheduler库)
- 开发天气预警通知系统(结合邮件/SMS API)
- 历史天气大数据分析(用Pandas做时间序列分析)
- 结合GIS地图展示(pyecharts超酷炫!)
七、说在最后(超级重要!!!)
最近帮某奶茶店分析客流量与天气关系时(想不到吧!),发现下雨天订单量增加23%(配送费立功了)。所以天气数据真的超有用!但切记:爬虫虽好,不要贪杯哦~(合法合规永远是第一位的!)
小贴士:本文案例仅用于学习交流,实际使用请遵守相关网站规定。如果网站改版导致代码失效,记得自己调试CSS选择器哦~(别打我,这就是爬虫的日常!)