You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典存储电影API数据失败问题排查及打印方法咨询

从TMDB API获取电影标题与ID并存储到字典的问题解决

代码无法运行的原因

  • API地址拼写错误:请求URL里的discover/moie写错了,正确是discover/movie,这会直接导致请求返回404错误,拿不到有效数据。
  • 无效API密钥:代码里的mykey是占位符,必须替换成你在TMDB官网申请的真实API密钥,不然会返回权限错误。
  • 循环范围不合理:TMDB的discover API分页有严格上限(最多500页),你写的range(1,36590)会发起大量无效请求,还可能触发API频率限制被封禁。
  • 缺少异常处理:一旦请求失败(比如断网、API返回错误)或者数据里没有results键,程序会直接崩溃。
  • 冗余的setdefault调用:每次循环都调用setdefault初始化列表完全没必要,提前把字典建好就行。

修正后的代码

import requests

# 替换成你自己的TMDB API密钥
API_KEY = "your_real_api_key"
BASE_URL = "https://api.themoviedb.org/3/discover/movie"

# 提前初始化存储数据的字典
movie_data = {
    "original_title": [],
    "id": []
}

# 先获取总页数,避免无效循环
request_params = {
    "api_key": API_KEY,
    "language": "en-US",
    "sort_by": "popularity.desc",
    "include_adult": "false",
    "include_video": "false",
    "with_watch_monetization_types": "flatrate",
    "page": 1
}

try:
    # 请求第一页数据,获取总页数
    response = requests.get(BASE_URL, params=request_params)
    response.raise_for_status()  # 检查请求是否成功
    first_page = response.json()
    total_pages = first_page.get("total_pages", 1)
    # TMDB API限制最多只能获取500页,取较小值
    max_pages = min(total_pages, 500)

    # 处理第一页的电影数据
    for item in first_page["results"]:
        movie_data["original_title"].append(item["original_title"])
        movie_data["id"].append(item["id"])

    # 遍历剩余页面
    for page_num in range(2, max_pages + 1):
        request_params["page"] = page_num
        response = requests.get(BASE_URL, params=request_params)
        response.raise_for_status()
        current_page = response.json()
        for item in current_page["results"]:
            movie_data["original_title"].append(item["original_title"])
            movie_data["id"].append(item["id"])

    # 打印结果(数据量太大时,建议只打示例或存文件)
    print(f"总共获取到 {len(movie_data['original_title'])} 部电影")
    print("前5条数据示例:")
    for title, movie_id in zip(movie_data["original_title"][:5], movie_data["id"][:5]):
        print(f"ID: {movie_id} | 标题: {title}")

except requests.exceptions.RequestException as err:
    print(f"请求出错:{err}")
except KeyError as err:
    print(f"数据解析失败,缺少字段:{err}")

修正说明

  1. 修复了API地址的拼写错误,确保请求能正常到达TMDB服务器
  2. 使用params参数传递请求参数,比字符串拼接更安全易维护
  3. 先获取总页数并遵守TMDB的500页限制,避免无效请求
  4. 添加了异常处理,能捕获网络错误、API错误、数据解析错误等情况
  5. 提前初始化字典的列表字段,去掉了冗余的setdefault调用
  6. 避免直接打印超大字典,改为打印总数量和前几条示例,防止输出过载

内容的提问来源于stack exchange,提问作者Elly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:40:32