使用Cinemagoer(原IMDbPY)获取剧集触发KeyError问题求助
Cinemagoer(原IMDbPY)获取电视剧集抛出KeyError,官方示例也失效
问题描述
使用Cinemagoer获取电视剧集信息时,无论用自定义代码还是官方文档示例,均无法正常运行。所有剧集都存在该问题,重装多个版本的IMDbPY也无法解决。该功能在2023年6月仍可正常使用,近期突然失效。
代码示例
import imdb ia = imdb.Cinemagoer() # 替代旧版的imdb.IMDb() code = "6468322" series = ia.get_movie(code) ia.update(series, 'episodes') episodes = series['episodes'] print(series)
错误信息
运行时会抛出类似以下的KeyError:
CRITICAL [imdbpy] C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\imdb\__init__.py:850: caught an exception retrieving or parsing "episodes" info set for mopID "6468322" (accessSystem: http) Traceback (most recent call last): File "C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\imdb\__init__.py", line 848, in update ret = method(mopID) ^^^^^^^^^^^^^ File "C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\imdb\parser\http\__init__.py", line 667, in get_movie_episodes data_d['data']['episodes'][season] = other_d['data']['episodes'][season] ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ KeyError: 2 Traceback (most recent call last): File "C:\Users\...\OneDrive\Desktop\Python shit\stupid.py", line 7, in <module> ia.update(series, 'episodes') File "C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\imdb\__init__.py", line 848, in update ret = method(mopID) File "C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\imdb\parser\http\__init__.py", line 667, in get_movie_episodes data_d['data']['episodes'][season] = other_d['data']['episodes'][season] KeyError: 2
有时也会出现:
Traceback (most recent call last): File "C:\Users\...\OneDrive\Desktop\Python shit\stupid.py", line 8, in <module> episodes = series['episodes'] File "C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\imdb\utils.py", line 1503, in __getitem__ rawData = self.data[key] KeyError: 'episodes'
KeyError的数值会在2到4之间变化。
解决方案
该问题核心原因是IMDb官方更新了网页结构,Cinemagoer的HTTP解析器未及时适配新布局,导致解析剧集列表时无法找到对应季节的键值。
临时修复方案
- 修改Cinemagoer解析代码:
- 找到Python安装目录下的
imdb/parser/http/__init__.py文件,定位到get_movie_episodes方法(约667行位置)。 - 在访问
other_d['data']['episodes'][season]前,先判断季节是否存在,避免直接访问不存在的键:if season in other_d['data']['episodes']: data_d['data']['episodes'][season] = other_d['data']['episodes'][season] else: # 可选:记录缺失的季节或直接跳过 pass - 保存修改后重新运行代码,可避免因单个季节数据缺失导致的崩溃,至少能获取已存在的剧集信息。
- 找到Python安装目录下的
- 切换至IMDb官方API:
若能申请到IMDb官方API密钥,直接调用官方API获取剧集信息,这是不受网页结构变化影响的稳定方案。 - 等待官方更新:
关注Cinemagoer的官方仓库,等待开发者发布适配IMDb新页面的版本。
内容的提问来源于stack exchange,提问作者Rand al'Thor
相关产品推荐
相关产品推荐

