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

使用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解析器未及时适配新布局,导致解析剧集列表时无法找到对应季节的键值。

临时修复方案

  1. 修改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
      
    • 保存修改后重新运行代码,可避免因单个季节数据缺失导致的崩溃,至少能获取已存在的剧集信息。
  2. 切换至IMDb官方API:
    若能申请到IMDb官方API密钥,直接调用官方API获取剧集信息,这是不受网页结构变化影响的稳定方案。
  3. 等待官方更新:
    关注Cinemagoer的官方仓库,等待开发者发布适配IMDb新页面的版本。

内容的提问来源于stack exchange,提问作者Rand al'Thor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:38:18