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

Python新手求助:IMDbPy调用报错且速度慢,求优化及替代方案

解决IMDbPy报错并优化速度,附替代方案

一、IMDbPy报错原因与修复

你遇到的错误是因为ia.get_movie()的info参数接受的是预定义的信息集名称,而非具体字段名。title、year这类属于字段,不是信息集,所以会触发"unknown information set"错误。

修正后的代码

# 全局复用IMDb实例,避免重复初始化开销
ia = IMDb(cache=True)  # 启用缓存,大幅提升重复请求速度

def get_imdb_info(movie_name):
    # 限制搜索结果数量,减少返回数据
    results = ia.search_movie(movie_name, results=1)
    if not results:
        return None  # 处理无搜索结果的边界情况
    
    movie_id = results[0].getID()
    # 指定需要的信息集:
    # 'info' → 包含title、year、genres、rating等基础元数据
    # 'plot' → 剧情简介
    # 'episodes' → 剧集的季/集信息(仅对剧集有效)
    movie = ia.get_movie(movie_id, info=['info', 'plot', 'episodes'])
    
    # 正确访问字段(注意rating是小写)
    print(f"标题: {movie['title']}")
    print(f"年份: {movie['year']}")
    print(f"类型: {movie['genres']}")
    print(f"评分: {movie['rating']}")
    print(f"剧情简介: {movie['plot'][0]}")
    
    # 如果是剧集,遍历季和集
    if 'episodes' in movie:
        for season_num, episodes in movie['episodes'].items():
            print(f"\n第{season_num}季:")
            for episode in episodes:
                print(f"  第{episode['episode']}集: {episode['title']} 评分:{episode.get('rating', '无')}")
    
    return movie

关键优化点

  1. 复用IMDb实例:避免每次函数调用都重新初始化,减少连接开销。
  2. 启用缓存:cache=True会把已请求的数据本地缓存,重复查询同一影视信息时直接读取缓存,速度提升明显。
  3. 限制搜索结果:results=1只返回第一个搜索结果,减少数据传输量。
  4. 精准指定信息集:只请求需要的信息集,避免默认获取全部数据导致的慢加载。

二、替代方案推荐

如果IMDbPy的使用体验仍不理想,推荐以下两个更稳定、高效的方案:

1. OMDb API

  • 特点:返回JSON格式,解析简单,支持电影/剧集的基础信息、剧情简介、评分,需免费API密钥(官网申请)。
import requests

OMDB_API_KEY = "你的API密钥"

def get_omdb_info(movie_name):
    params = {
        "t": movie_name,
        "apikey": OMDB_API_KEY,
        "plot": "full",  # 获取完整剧情
        "type": "movie"  # 可选:指定类型为movie/tv
    }
    response = requests.get("http://www.omdbapi.com/", params=params)
    data = response.json()
    
    if data["Response"] == "True":
        # 提取关键信息
        return {
            "title": data["Title"],
            "year": data["Year"],
            "genres": data["Genre"].split(", "),
            "rating": data["imdbRating"],
            "plot": data["Plot"]
        }
    return None

2. TMDB API

  • 特点:功能全面,支持电影/剧集的详细信息(包括每一集的名称、评分、演员、海报等),数据更新及时,需免费API密钥(官网申请)。
import requests

TMDB_API_KEY = "你的API密钥"
BASE_URL = "https://api.themoviedb.org/3"

def get_tmdb_info(movie_name):
    # 第一步:搜索目标影视,获取ID和类型
    search_params = {"api_key": TMDB_API_KEY, "query": movie_name}
    search_res = requests.get(f"{BASE_URL}/search/multi", params=search_params).json()
    
    if not search_res["results"]:
        return None
    target = search_res["results"][0]
    media_type = target["media_type"]
    item_id = target["id"]
    
    # 第二步:根据类型获取详细信息
    detail_params = {"api_key": TMDB_API_KEY}
    if media_type == "movie":
        detail_url = f"{BASE_URL}/movie/{item_id}"
        detail_params["append_to_response"] = "credits,images"  # 附加演员、海报信息
    elif media_type == "tv":
        detail_url = f"{BASE_URL}/tv/{item_id}"
        detail_params["append_to_response"] = "seasons,episodes"  # 附加季/集信息
    else:
        return None
    
    detail_res = requests.get(detail_url, params=detail_params).json()
    return detail_res

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:32:15