数码港
霓虹主题四 · 更硬核的阅读氛围

Python调用API实战:从天气查询到豆瓣电影数据抓取

发布时间:2026-01-23 21:11:02 阅读:135 次

在数码港做演示制作,经常要快速把外部数据“搬”进页面里——比如做个实时天气小模块,或者拉几条豆瓣新上映电影信息当素材。这时候,Python 调用 API 就是最顺手的活儿。

先装个轮子:requests 是标配

不用折腾 urllib,直接 pip install requests 就行。它轻、稳、写起来像说话一样自然。

例子1:查今天北京天气(和风天气免费版)

注册个和风天气开发者账号,拿个免费 key,就能调用它的「实时天气」接口:

import requests

url = "https://devapi.qweather.com/v7/weather/now"
params = {
"key": "你的key",
"location": "101010100" # 北京地区ID
}

res = requests.get(url, params=params)
data = res.json()

if data.get("code") == "200":
temp = data["now"]["temp"]
text = data["now"]["textDay"]
print(f"北京现在 {temp}°C,{text}")
else:
print("请求失败:", data.get("msg"))

跑完输出:北京现在 24°C,晴。两分钟搞定,比手动刷新网页还快。

例子2:抓3条豆瓣正在热映的电影

豆瓣官方没开放公开 API,但它的网页接口还能用(注意别高频刷)。我们模拟浏览器请求,拿首页热映列表:

import requests

headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
}

url = "https://movie.douban.com/j/new_movies"
res = requests.get(url, headers=headers)
data = res.json()

for movie in data["new_movies"][:3]:
print(f"《{movie['title']}》 评分:{movie.get('rating', '暂无')} 分")

实际运行可能返回类似:
《年会不能停!》 评分:8.4 分
《涉过愤怒的海》 评分:7.2 分
《孤注一掷》 评分:7.9 分

小提醒:别踩坑

• 看清 API 文档里的 rate limit(比如每分钟最多10次),本地测试加个 time.sleep(1)
• 返回 403?八成是 header 缺 User-Agent 或 Referer;
• json() 解析前先 print(res.text) 看一眼原始响应,比瞎猜快十倍;
• 演示用的数据,别硬塞敏感字段——key、token 这类一律用环境变量或配置文件隔离。

顺手封装成函数,下次复制粘贴就开干

比如把天气逻辑拎出来:

def get_weather(city_id: str, key: str) -> dict:
url = "https://devapi.qweather.com/v7/weather/now"
r = requests.get(url, params={"key": key, "location": city_id})
if r.status_code == 200:
j = r.json()
return {"temp": j["now"]["temp"], "cond": j["now"]["textDay"]}
return {"temp": "--", "cond": "获取失败"}

调用时就一句:beijing = get_weather("101010100", os.getenv("QWEATHER_KEY"))

演示制作讲究快、准、稳。API 不是黑盒子,是能摸得着、改得动、随时换的活数据源。多跑几次,比看十篇教程都管用。