一、为什么要学天气数据抓取?(真香警告!)

兄弟们!今天咱们来搞点实用又有趣的玩意儿——用Python爬取天气数据!!!(拍桌)你肯定想不到,这个看似简单的操作背后藏着多少宝藏!比如:

  • 做旅行计划时批量获取目的地天气
  • 分析城市气候变化趋势(气候变化研究者的福音)
  • 开发智能家居的天气联动功能
  • 做数据分析项目的真实数据源

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(图示:用爬取数据生成的温度变化折线图)

二、准备工作清单(别急着写代码!)

工欲善其事,必先利其器!咱们先把装备配齐:

  1. Python环境:推荐3.8+版本(别问为什么,问就是兼容性好)
  2. 安装必备库:
    pip install requests beautifulsoup4 pandas matplotlib
    
  3. 目标网站分析:咱们以「中国天气网」为例(地址: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生成交互式图表
  • 添加天气图标显示
  • 制作温度热力图

四、你可能遇到的坑(防掉指南!)

  1. 反爬虫机制

    • 随机User-Agent(推荐fake_useragent库)
    • 使用代理IP(免费的可试试快代理)
    • 添加请求延时(time.sleep随机1-3秒)
  2. 法律风险

    • 遵守robots.txt协议
    • 控制请求频率
    • 不要爬取敏感数据
  3. 网站改版

    • 定期维护代码
    • 使用try-except处理异常
    • 做好日志记录

五、还能怎么玩?(扩展思路)

学会了基础操作,你还可以:

  • 搭建天气数据API服务(FastAPI框架)
  • 开发微信天气提醒机器人
  • 结合地理信息做全国天气地图
  • 分析历史天气数据预测未来趋势

六、写在最后(掏心窝子的话)

爬虫就像一把瑞士军刀——用得好事半功倍,用不好可能伤到自己!记住三个原则:

  1. 合法合规是底线
  2. 技术要为业务服务
  3. 持续学习才是王道

(彩蛋)附赠一个进阶小技巧:用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")

赶紧跑起来试试吧!遇到问题欢迎评论区交流~(比心)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐