本文目录导读:

- 📚 目录导读
- 为什么你需要一个天气查询脚本?
- 准备工作:选择数据源与注册API密钥
- 核心代码:用
requests库发起HTTP请求 - 解析JSON数据:提取温度、湿度与天气状况
- 进阶优化:命令行参数、缓存与错误处理
- 实战问答:解决常见报错与逻辑陷阱
- 部署建议:将脚本变为全局命令
- 结语与SEO优化要点
手把手教你用Python写一个天气查询脚本:从API调用到命令行工具**
📚 目录导读
- 为什么你需要一个天气查询脚本?
- 准备工作:选择数据源与注册API密钥
- 核心代码:用
requests库发起HTTP请求 - 解析JSON数据:提取温度、湿度与天气状况
- 进阶优化:命令行参数、缓存与错误处理
- 实战问答:解决常见报错与逻辑陷阱
- 部署建议:将脚本变为全局命令
为什么你需要一个天气查询脚本?
在日常开发或生活中,手动打开浏览器查询天气效率低下,一个命令行脚本能让你直接通过终端输入weather 北京 快速获取实时天气,方便集成到定时任务(如每日推送)或自动化工作流中,更重要的是,这个案例涵盖了API交互、JSON解析、异常处理等Python核心技能,是学习爬虫与数据处理的绝佳起点。
准备工作:选择数据源与注册API密钥
目前主流的免费天气API包括:
- OpenWeatherMap(全球覆盖,免费版每分钟60次调用)
- 和风天气(国内访问速度快,需实名认证)
- WeatherAPI(无需信用卡,注册即送免费额度)
以OpenWeatherMap为例(适合全球用户),操作步骤:
- 访问官网注册账号,进入API Keys页面生成密钥。
- 记住你的
API_KEY,并确认免费订阅(Free tier)已激活。
核心代码:用requests库发起HTTP请求
首先安装依赖:
pip install requests
编写基础脚本:
import requests
def get_weather(city):
api_key = "你的API_KEY"
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
response = requests.get(url)
return response.json()
关键点:units=metric参数将温度转为摄氏度,否则返回开尔文温度。
解析JSON数据:提取温度、湿度与天气状况
API返回的JSON结构复杂,我们需要提取关键字段:
def parse_weather(data):
if data.get("cod") != 200:
return f"错误: {data.get('message', '未知错误')}"
main = data["main"]
weather = data["weather"][0]
return f"{data['name']}天气: {weather['description']}, " \
f"温度{main['temp']}°C, 湿度{main['humidity']}%"
逻辑解析:cod字段表示HTTP状态码,200为成功;weather是列表,取第一个元素获取描述。
进阶优化:命令行参数、缓存与错误处理
1 命令行输入支持
使用sys.argv接收参数:
import sys
if __name__ == "__main__":
city = sys.argv[1] if len(sys.argv) > 1 else "Beijing"
data = get_weather(city)
print(parse_weather(data))
2 增加缓存与超时
避免频繁请求被封,加入cachetools(需安装):
from cachetools import cached, TTLCache
cache = TTLCache(maxsize=10, ttl=600) # 10分钟缓存
@cached(cache)
def get_weather_cached(city):
return get_weather(city)
3 网络超时处理
在requests.get()中添加timeout=5,并用try-except捕获requests.RequestException。
实战问答:解决常见报错与逻辑陷阱
Q1:遇到401 Unauthorized怎么办?
检查API_KEY是否正确,且账号已激活,OpenWeatherMap新用户需等待约2小时密钥生效。
Q2:城市名包含空格(如“New York”)如何处理?
使用urllib.parse.quote进行URL编码,或直接替换空格为%20。
Q3:如何处理非英语城市名(如“重庆”)?
在URL中添加&lang=zh_cn参数,可将描述转为中文。
Q4:脚本返回“city not found”但城市存在?
确认城市拼写,或使用城市的行政区划ID(q=city,country格式,例如q=London,uk)。
部署建议:将脚本变为全局命令
在Linux/macOS中,将脚本保存为weather.py,添加执行权限并软链接:
chmod +x weather.py ln -s /path/to/weather.py /usr/local/bin/weather
你可以在任意终端直接运行weather 上海。
Windows用户可使用pyinstaller打包成exe文件,或添加环境变量路径。
结语与SEO优化要点
本文通过完整的代码示例和步骤拆解,帮助读者从零构建天气查询工具,为了提升搜索引擎排名,请重点关注以下关键词布局:中包含“天气查询脚本”和“Python”自然融入“API调用”“命令行”等长尾词
- 利用H2/H3标签划分层级,便于爬虫抓取
- 提供实操代码和FAQ,增加页面停留时长
创作建议:结合自身开发经历,在评论区分享你使用不同API的踩坑经验,能显著提升互动率,如果你希望查询未来天气预报,可进一步研究forecast接口,原理与当前演示完全一致,只是URL路径不同,动手试试你的第一个自动化工具吧!