使用Python调用TMDB API提取release_date时触发KeyError问题求助
解决TMDB API循环获取多页热门电影数据的KeyError问题
通过TMDB API提取热门电影数据时,单页请求可正常运行,但循环获取3页数据时触发KeyError,提示'release_date'键不存在。原代码及错误栈如下:
import requests import pandas as pd import numpy as np title=[] overview=[] popularity=[] release_date=[] vote_count=[] vote_average=[] adult=[] original_language=[] for i in np.arange(1, 3): # replace <<my_api_key>> with your key url = f'https://api.themoviedb.org/3/movie/popular?api_key=<<my_api_key>>&language=en-US&page={i}' output = requests.get(url).json() needed_output = output['results'] for val in needed_output: title.append(val['title']) overview.append(val['overview']) popularity.append(val['popularity']) vote_count.append(val['vote_count']) vote_average.append(val['vote_average']) original_language.append(val['original_language']) adult.append(val['adult']) release_date.append(val['release_date'])
错误栈:
KeyError Traceback (most recent call last) <ipython-input-41-68206e98ef80> in <cell line: 9>() 19 original_language.append(val['original_language']) 20 adult.append(val['adult']) ---> 21 release_date.append(val['release_date']) KeyError: 'release_date'
问题根源
TMDB热门电影列表中可能包含未上映影片或数据缺失的条目,这类条目没有release_date字段。单页请求刚好未包含此类条目,多页循环时就触发了KeyError。
可行解决方案
方法1:使用字典get()方法设置默认值
用dict.get(key, default)替代直接通过dict[key]访问,当键不存在时返回指定默认值(比如np.nan,方便后续pandas处理):
修改代码中release_date.append(val['release_date'])为:
release_date.append(val.get('release_date', np.nan))
方法2:先检查键是否存在再访问
显式判断字段是否存在,避免直接访问报错:
if 'release_date' in val: release_date.append(val['release_date']) else: release_date.append(None) # 可替换为''、np.nan等适合业务的默认值
方法3:改用字典列表收集数据后转DataFrame(更简洁)
先将每条电影数据以字典形式存入列表,再转换为pandas DataFrame,自动处理缺失字段:
import requests import pandas as pd import numpy as np movies = [] for i in np.arange(1, 3): url = f'https://api.themoviedb.org/3/movie/popular?api_key=<<my_api_key>>&language=en-US&page={i}' output = requests.get(url).json() movies.extend(output['results']) # 仅提取需要的字段,缺失字段自动填充为NaN df = pd.DataFrame(movies)[['title', 'overview', 'popularity', 'release_date', 'vote_count', 'vote_average', 'adult', 'original_language']]
内容的提问来源于stack exchange,提问作者Ch M Haider Ali gujjer
相关产品推荐
相关产品推荐

