IMDbPY中search_movie报KeyError,get_movie正常,如何获取电影年份
解决IMDbPY search_movie()无法获取年份的问题
问题原因
search_movie()返回的是搜索结果的摘要信息,只包含标题、IMDb ID这类最基础的字段,year字段不在默认返回的数据集里;而get_movie()是直接拉取电影的完整详情页数据,所以能正常拿到year。
解决方案
方案1:通过update方法补全电影信息(推荐)
对搜索到的第一个条目调用ia.update()方法,拉取完整数据后就能获取year:
import imdb ia = imdb.IMDb() search_results = ia.search_movie("The Shawshank Redemption") # 取第一个搜索结果 movie = search_results[0] # 拉取完整电影信息 ia.update(movie) # 现在可以正常获取year和title了 print(f"{movie['title']} : {movie['year']}")
方案2:从标题字符串中提取年份(不推荐)
部分搜索结果的标题会自带年份(格式为(YYYY)),可以用正则提取,但这种方法不稳定——遇到重名电影、标题里带其他括号内容的情况就会出错:
import imdb import re ia = imdb.IMDb() search_results = ia.search_movie("The Shawshank Redemption") movie_title = search_results[0]['title'] # 匹配括号里的四位数字 year_match = re.search(r'\((\d{4})\)', movie_title) if year_match: year = year_match.group(1) # 去掉标题里的年份部分 clean_title = re.sub(r'\s*\(\d{4}\)', '', movie_title) print(f"{clean_title} : {year}") else: print("无法从标题中提取年份,请使用方案1")
注意事项
- 方案1是官方认可的可靠方式,虽然需要额外一次网络请求,但能保证数据准确。
- 如果要批量处理搜索结果,注意控制请求频率,避免被IMDb限制访问。
内容的提问来源于stack exchange,提问作者Prison Mike
相关产品推荐
相关产品推荐

