用Python爬虫抓取天气数据的保姆级教程(附可视化技巧)

一、先看成果再动手

先给各位看看咱们今天要实现的酷炫效果(划重点):

  1. 实时获取指定城市7天天气预报 🌤️
  2. 自动生成温度变化折线图 📈
  3. 生成降雨概率柱状图 📊
  4. 数据保存为CSV文件 💾

(小白友好警告)别被这些专业名词吓到!跟着我的步骤操作,包你半小时搞定!


二、准备工作:安装必备工具包

打开你的cmd/终端,输入以下命令:

pip install requests beautifulsoup4 pandas matplotlib

(重要提示)如果遇到安装失败,试试加上清华镜像源:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名

三、实战开始:手把手写代码

3.1 锁定目标网站

本次选用「中国天气网」作为数据源(网址:www.weather.com.cn)。打开网站后按F12打开开发者工具,重点观察这两个地方:

  1. 网页请求的Headers信息
  2. HTML标签结构(特别是class名称)

(防坑指南)很多网站的class名会定期更换,如果运行失败记得重新检查!

3.2 核心爬虫代码

import requests
from bs4 import BeautifulSoup
import pandas as pd

def get_weather(city_code):
    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'}
    
    response = requests.get(url, headers=headers)
    response.encoding = 'utf-8'
    
    soup = BeautifulSoup(response.text, 'html.parser')
    weather_list = soup.find('ul', class_='t clearfix').find_all('li')
    
    data = []
    for day in weather_list[:7]:  # 取7天数据
        date = day.find('h1').text
        weather = day.find('p', class_='wea').text
        temp = day.find('p', class_='tem').text.strip()
        wind = day.find('p', class_='win').find('i').text
        
        data.append([date, weather, temp, wind])
    
    df = pd.DataFrame(data, columns=['日期', '天气', '温度', '风向'])
    return df

# 使用示例(北京的城市代码是101010100)
weather_data = get_weather('101010100')
print(weather_data.head())

3.3 可视化模块

加上这几行代码,瞬间让数据会说话:

import matplotlib.pyplot as plt

# 温度变化折线图
plt.figure(figsize=(10,6))
weather_data['温度'].str.extract('(\d+)').astype(int).plot(
    kind='line', 
    marker='o',
    color='#FF6B6B'
)
plt.title('未来一周温度变化趋势', fontsize=14)
plt.xlabel('日期')
plt.ylabel('温度(℃)')
plt.grid(True, linestyle='--')
plt.savefig('temperature.png')

四、你可能遇到的坑(血泪经验总结)

4.1 网站反爬机制

如果遇到403错误,试试这些招数:

  1. 更换User-Agent头
  2. 添加请求间隔时间(time.sleep(2))
  3. 使用代理IP(进阶操作)

4.2 数据解析异常

当发现数据错乱时:

  1. 检查网页结构是否变化
  2. 用print(soup.prettify())输出网页结构
  3. 使用更精准的CSS选择器

4.3 编码问题

遇到乱码记得:

response.encoding = 'utf-8'  # 或者 'gbk'

五、项目升级思路(举一反三)

5.1 扩展功能

  • 添加邮件自动发送功能 📧
  • 接入短信通知API 📱
  • 开发可视化网页版 🌐

5.2 数据应用

  • 结合历史天气数据分析季节变化
  • 制作旅游城市天气对比报告
  • 开发穿衣推荐系统 👗

六、法律与道德提示(超级重要)

  1. 控制请求频率(建议≥30秒/次)
  2. 不要用于商业用途
  3. 尊重网站的robots.txt协议
  4. 避免对服务器造成压力

(求生欲声明)本教程仅用于学习交流,请勿滥用!


七、完整源码获取

关注公众号「Python大本营」,回复「天气爬虫」获取完整可运行代码包。包含:

  • 多城市支持版本
  • 可视化增强版
  • 异常处理优化版

(彩蛋)源码中还藏着一个神秘功能——空气质量指数分析!等你来解锁~


八、常见问题QA

Q:为什么我的爬虫突然不能用了?
A:大概率是网站改版了,需要重新分析页面结构

Q:如何获取其他城市代码?
A:访问中国天气网,搜索城市后看地址栏数字

Q:数据可以保存到数据库吗?
A:当然!用pandas的to_sql()方法轻松实现


下次想看什么爬虫案例?留言告诉我!点赞过1000马上出【B站弹幕抓取与词云生成】教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值