使用IMDbPY调用get_movie()获取电影信息时遇未知错误求助
解决IMDbPY调用get_movie()时的解析错误问题
我之前也碰到过类似的IMDbPY解析异常,结合你的代码和报错信息,咱们从代码逻辑修复和解析问题规避两个方向来解决:
一、先修复代码里的基础逻辑问题
你的代码里有几个容易被忽略的小错误,可能间接导致解析异常:
- 读取文件时未处理换行符:
readlines()会把每行末尾的\n也读进来,用这个带换行的字符串搜索电影,可能拿到错误的movieID,后续解析自然出错。 - 循环内变量覆盖问题:你先把行内容
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对象时指定:
这种方式依赖IMDb的官方API接口,稳定性比HTML解析高很多,但部分字段可能不如HTML解析全面。ia = imdb.IMDb(accessSystem='http') - 捕获解析异常:在调用
get_movie()时用try-except包裹,避免单个电影的解析错误导致整个程序崩溃。
三、额外提示
如果以上方法还是无法解决,考虑直接使用IMDb官方提供的API服务(不需要第三方库),不过需要申请API密钥,稳定性和兼容性会更好。
内容的提问来源于stack exchange,提问作者nick_rinaldi
相关产品推荐
相关产品推荐

