Python爬虫实战:抓取全国天气数据并可视化分析(附完整代码)
·
文章目录
一、为什么要学天气数据抓取?(真香警告!)
兄弟们!今天咱们来搞点实用又有趣的玩意儿——用Python爬取天气数据!!!(拍桌)你肯定想不到,这个看似简单的操作背后藏着多少宝藏!比如:
- 做旅行计划时批量获取目的地天气
- 分析城市气候变化趋势(气候变化研究者的福音)
- 开发智能家居的天气联动功能
- 做数据分析项目的真实数据源

(图示:用爬取数据生成的温度变化折线图)
二、准备工作清单(别急着写代码!)
工欲善其事,必先利其器!咱们先把装备配齐:
- Python环境:推荐3.8+版本(别问为什么,问就是兼容性好)
- 安装必备库:
pip install requests beautifulsoup4 pandas matplotlib - 目标网站分析:咱们以「中国天气网」为例(地址:www.weather.com.cn)
(超级重要)打开浏览器开发者工具(F12),重点看这两个地方:
- Network选项卡:观察数据请求方式
- Elements选项卡:定位数据所在的HTML标签
三、实战代码分步拆解(手把手教学!)
步骤1:发送HTTP请求(核心中的核心!)
import requests
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)
response.encoding = 'utf-8' # 解决中文乱码
(避坑指南)这里有个大坑!很多网站会检查:
- User-Agent(必须伪装成浏览器)
- 请求频率(太快会被封IP)
- Cookies验证(复杂网站需要维护会话)
步骤2:解析HTML数据(BeautifulSoup大法好!)
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
# 定位天气数据所在的div
weather_div = soup.find('div', {'id': '7d'})
# 提取日期数据
dates = [item.text for item in weather_div.select('ul.t.clearfix > li > h1')]
# 提取温度数据
temps = [item.text for item in weather_div.select('ul.t.clearfix > li > p.tem')]
(灵魂拷问)为什么用CSS选择器而不用XPath?其实两者都可以,但CSS选择器:
- 写法更简洁
- 兼容性更好
- 学习成本更低
步骤3:数据清洗与存储(这才是真功夫!)
import pandas as pd
# 创建DataFrame
df = pd.DataFrame({
'日期': dates,
'最低温度': [temp.split('/')[0].replace('℃','') for temp in temps],
'最高温度': [temp.split('/')[1].replace('℃','') for temp in temps]
})
# 保存到CSV
df.to_csv('shanghai_weather.csv', index=False)
(血泪教训)数据清洗时要注意:
- 去除特殊字符(比如℃符号)
- 处理缺失值(用try-except包裹)
- 类型转换(字符串转数值)
步骤4:可视化展示(让数据说话!)
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(df['日期'], df['最高温度'], 'r-o', label='最高温度')
plt.plot(df['日期'], df['最低温度'], 'b--s', label='最低温度')
plt.title('上海未来7天气温变化趋势')
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.legend()
plt.grid(True)
plt.show()
(效果升级)想更酷炫?可以:
- 使用pyecharts生成交互式图表
- 添加天气图标显示
- 制作温度热力图
四、你可能遇到的坑(防掉指南!)
-
反爬虫机制:
- 随机User-Agent(推荐fake_useragent库)
- 使用代理IP(免费的可试试快代理)
- 添加请求延时(time.sleep随机1-3秒)
-
法律风险:
- 遵守robots.txt协议
- 控制请求频率
- 不要爬取敏感数据
-
网站改版:
- 定期维护代码
- 使用try-except处理异常
- 做好日志记录
五、还能怎么玩?(扩展思路)
学会了基础操作,你还可以:
- 搭建天气数据API服务(FastAPI框架)
- 开发微信天气提醒机器人
- 结合地理信息做全国天气地图
- 分析历史天气数据预测未来趋势
六、写在最后(掏心窝子的话)
爬虫就像一把瑞士军刀——用得好事半功倍,用不好可能伤到自己!记住三个原则:
- 合法合规是底线
- 技术要为业务服务
- 持续学习才是王道
(彩蛋)附赠一个进阶小技巧:用Selenium应对动态加载的天气数据!虽然速度慢点,但能破解大部分JS渲染的页面。代码片段:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.weather.com.cn')
# 执行JavaScript获取动态数据
weather_data = driver.execute_script("return document.getElementById('7d').innerHTML")
赶紧跑起来试试吧!遇到问题欢迎评论区交流~(比心)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)