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

使用IMDbPY调用get_movie()获取电影信息时遇未知错误求助

解决IMDbPY调用get_movie()时的解析错误问题

我之前也碰到过类似的IMDbPY解析异常,结合你的代码和报错信息,咱们从代码逻辑修复和解析问题规避两个方向来解决:

一、先修复代码里的基础逻辑问题

你的代码里有几个容易被忽略的小错误,可能间接导致解析异常:

  1. 读取文件时未处理换行符:readlines()会把每行末尾的\n也读进来,用这个带换行的字符串搜索电影,可能拿到错误的movieID,后续解析自然出错。
  2. 循环内变量覆盖问题:你先把行内容append到movie_list,紧接着又把movie_list重新赋值为ia.search_movie(i),导致之前的append完全无效,逻辑混乱。

修改这部分的代码:

import imdb
import time

def Main():
    c = """Python Movie Rating Scraper by Nickydimebags"""
    print(c)
    time.sleep(2)
    
    # 读取电影列表,处理换行符并过滤空行
    with open('movielist.txt', 'r') as f1:
        movie_list = [line.strip() for line in f1.readlines() if line.strip()]
    
    ia = imdb.IMDb()
    for movie_name in movie_list:
        print(f"正在处理电影:{movie_name}")
        # 搜索电影
        search_results = ia.search_movie(movie_name)
        if not search_results:
            print(f"未找到电影:{movie_name}")
            continue
        movie_id = search_results[0].movieID
        print(f"获取到的movieID:{movie_id}")
        
        # 尝试获取电影信息
        try:
            # 只获取需要的字段,减少解析压力
            m = ia.get_movie(movie_id, info=['main', 'rating', 'director', 'title'])
            # 输出预期信息
            print(f"标题:{m.get('title', '未知')}")
            print(f"评分:{m.get('rating', '未知')}")
            print(f"导演:{', '.join([d['name'] for d in m.get('directors', [])])}")
            print("---")
        except Exception as e:
            print(f"获取电影信息失败:{str(e)}")
            continue

# 先处理用户输入
print("Input your movie please: \n")
inp = input().strip()
with open('movielist.txt',"w") as fd:
    fd.write(inp)

Main()

二、解决IMDbPY的解析报错问题

你遇到的DOMHTMLMovieParser和DOMHTMLPlotParser报错,核心原因是IMDb官方页面结构更新了,但IMDbPY的HTML解析规则没同步更新(即使升级了库,维护速度也可能跟不上IMDb的迭代)。可以通过以下方式规避:

  • 指定需要获取的信息字段:默认调用ia.get_movie(movie_id)会尝试拉取所有可用信息,很多字段的解析规则可能已经失效。像上面代码里那样,通过info参数指定只获取main、rating、director这类你需要的字段,能大幅减少解析错误的概率。
  • 切换到非HTML解析模式:IMDbPY支持通过官方API接口(而非HTML页面解析)获取数据,你可以初始化IMDb对象时指定:
    ia = imdb.IMDb(accessSystem='http')
    
    这种方式依赖IMDb的官方API接口,稳定性比HTML解析高很多,但部分字段可能不如HTML解析全面。
  • 捕获解析异常:在调用get_movie()时用try-except包裹,避免单个电影的解析错误导致整个程序崩溃。

三、额外提示

如果以上方法还是无法解决,考虑直接使用IMDb官方提供的API服务(不需要第三方库),不过需要申请API密钥,稳定性和兼容性会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:33:26