遍历TMDB API解析结果为何数据缺失?如何修复?
TMDB接口遍历影片列表结果不完整的问题修复
问题场景
调用TMDB的person/movie_credits接口获取影人影片信息,通过json.loads解析响应后,json.dumps输出能看到大量original_title字段,但仅遍历parsed['cast']时得到的结果远少于显示的数量。
原代码
TMDB_TOKEN = "PUT YOURS HERE IF YOU WANNA TEST" headers = { "accept": "application/json", "Authorization": TMDB_TOKEN } id = 17520 url = "https://api.themoviedb.org/3/person/{person_id}/movie_credits".format(person_id=id) response = requests.get(url, headers=headers,) parsed = json.loads(response.text) print(json.dumps(parsed, indent=1)) all_filmo = { "doc":[] , 'cinema': [] , "tv" : [] } for i in parsed['cast']: print(i['original_title'])
现象对比
json.dumps展示的original_title列表(部分):
"original_title": "Cin\u00e9ma par... C\u00e9dric Klapisch",
"original_title": "Quand Jean devint Renoir",
...(大量后续条目)
- 实际遍历
parsed['cast']的结果:
Cinéma par... Cédric Klapisch
Quand Jean devint Renoir
...(仅16条条目)
错误原因
TMDB的person/movie_credits接口返回的数据中,影片信息分为两个独立数组:
cast:该影人作为演员参演的影片集合crew:该影人作为幕后人员(导演、编剧、制片等)参与的影片集合
你仅遍历了cast数组,而json.dumps输出里的大量original_title来自crew数组,因此遍历结果远少于显示的总量。
修复方案
需要同时遍历cast和crew两个数组,合并所有影片信息。为避免部分条目缺失字段导致报错,建议先判断条目是否包含original_title。
修复后的代码示例
import requests import json TMDB_TOKEN = "PUT YOURS HERE IF YOU WANNA TEST" headers = { "accept": "application/json", "Authorization": TMDB_TOKEN } person_id = 17520 url = f"https://api.themoviedb.org/3/person/{person_id}/movie_credits" response = requests.get(url, headers=headers) parsed = json.loads(response.text) # 合并演员参演和幕后参与的所有影片条目 all_movie_credits = parsed['cast'] + parsed['crew'] # 遍历并输出所有影片的original_title for item in all_movie_credits: if 'original_title' in item: print(item['original_title'])
补充说明
如果需要区分演员和幕后身份,可以在遍历时保留对应字段:
# 遍历演员参演条目 for item in parsed['cast']: print(f"演员参演:{item['original_title']} - 角色:{item.get('character', '无')}") # 遍历幕后参与条目 for item in parsed['crew']: print(f"幕后参与:{item['original_title']} - 职位:{item.get('job', '无')}")
内容的提问来源于stack exchange,提问作者r01_mage
相关产品推荐
相关产品推荐

