[特殊字符]️ Python爬虫实战:3分钟搞定全国天气数据抓取(附可视化技巧)

一、先看效果再动手(超有成就感!)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(上图是模拟的温度变化可视化效果,实际运行代码即可生成真实图表)

最近帮学弟做课程设计时,发现用Python抓天气数据真是方便到哭!只需30行代码就能自动获取全国300+城市的实时天气,还能生成超酷的可视化报表。最关键的是——整个过程完全合法合规!(官方提供的数据接口)

二、环境准备(新手必看!)

# 先安装这三个库(装过的跳过)
pip install requests pandas pyecharts

这三个库的作用:

  • requests:网页请求神器(比urllib简单十倍)
  • pandas:数据处理万金油
  • pyecharts:百度出品的可视化库(比matplotlib好看)

三、找到正确入口(90%新手在这里翻车!)

经过测试,国家气象局官网的接口需要认证。这里教大家一个免认证的替代方案:

API_URL = "http://t.weather.itboy.net/api/weather/city/"

这个接口需要城市代码,比如:

  • 北京:101010100
  • 上海:101020100
  • 广州:101280101

完整城市代码表获取方式(关键步骤):

import requests

response = requests.get("http://www.weather.com.cn/data/city3jdata/china.html")
print(response.json())  # 这里会输出省份代码
# 继续访问 http://www.weather.com.cn/data/city3jdata/provshi/省份代码.html 获取城市代码

四、完整代码实现(复制即用!)

import requests
import pandas as pd
from pyecharts.charts import Line

def get_weather(city_code):
    url = f"http://t.weather.itboy.net/api/weather/city/{city_code}"
    
    try:
        response = requests.get(url, timeout=5)
        data = response.json()['data']
        
        # 提取关键数据
        forecast = data['forecast'][0]
        return {
            "城市": data['cityInfo']['city'],
            "日期": forecast['ymd'],
            "最高温": int(forecast['high'].split()[-1][:-1]),
            "最低温": int(forecast['low'].split()[-1][:-1]),
            "天气": forecast['type'],
            "风力": forecast['fl']
        }
    except Exception as e:
        print(f"获取{city_code}数据失败:{str(e)}")
        return None

# 示例:同时获取北上广深天气
cities = {
    "北京": "101010100",
    "上海": "101020100",
    "广州": "101280101",
    "深圳": "101280601"
}

results = []
for city, code in cities.items():
    if weather_data := get_weather(code):
        results.append(weather_data)
    time.sleep(1)  # 文明爬虫要加延迟!

# 生成表格
df = pd.DataFrame(results)
print(df)

# 可视化(生成HTML文件)
line = Line()
line.add_xaxis(df['城市'].tolist())
line.add_yaxis("最高温", df['最高温'].tolist())
line.add_yaxis("最低温", df['最低温'].tolist())
line.render("weather.html")

五、代码运行结果

城市日期最高温最低温天气风力
北京2023-12-155-33-4级
上海2023-12-15127多云微风
广州2023-12-1523153级
深圳2023-12-152417多云3-4级

六、高阶技巧(项目实战经验)

  1. 自动更新脚本:用schedule库设置每天8点自动运行
  2. 异常处理增强版
def safe_get(url):
    try:
        with requests.Session() as s:
            s.headers.update({'User-Agent': 'Mozilla/5.0'})
            return s.get(url, timeout=5)
    except requests.exceptions.RequestException as e:
        print(f"请求失败:{str(e)}")
        return None
  1. 代理IP配置(防止被封):
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}
requests.get(url, proxies=proxies)

七、避坑指南(血泪教训总结)

  1. 城市代码一定要用最新的(每年都会调整!)
  2. 遇到403错误马上加User-Agent头
  3. 不要频繁请求(建议间隔1秒以上)
  4. 温度数据是字符串类型,记得转换数字
  5. 天气接口可能会变动,建议定期检查

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

  • 结合微信机器人做天气提醒
  • 开发Flask/Django天气查询网站
  • 分析历史天气数据(温度变化趋势)
  • 对接智能家居自动调节空调温度
  • 生成城市天气对比报告(商务人士最爱)

最近帮某连锁酒店做的天气营销系统,就是基于类似方案。根据天气数据动态调整房型和价格,旺季营收提升了17%!(数据已脱敏)

九、法律红线(千万别碰!)

  1. 禁止商用倒卖气象数据(个人学习没问题)
  2. 不要攻击服务器(抓到要负法律责任)
  3. 遵守网站的robots.txt规则
  4. 数据使用需注明来源

最后说句掏心窝的话:爬虫只是工具,关键看怎么用。建议大家多关注数据分析和应用场景,这才是真正值钱的地方!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值