[特殊字符]️ 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-15 5 -3 3-4级
上海 2023-12-15 12 7 多云 微风
广州 2023-12-15 23 15 3级
深圳 2023-12-15 24 17 多云 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. 数据使用需注明来源

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

本文是转载文章,点击查看原文
如有侵权,请联系 lx@jishuguiji.net 删除。