使用IMDbPy获取剧集ID时遭遇InvalidURL错误求助
修复IMDbPy获取剧集信息的URL错误及字段提取方案
错误原因
你碰到的http.client.InvalidURL错误,是因为生成的请求URL里混进了剧集名称(比如The Last of Us)而非正确的IMDb剧集ID。问题出在search_movie默认返回全类型结果,第一个结果可能不是剧集,导致获取的ID异常,最终生成带空格的无效URL。
修复代码及字段提取
1. 正确获取剧集对象
搜索时限定只返回剧集类型,确保拿到的是有效剧集ID:
from imdb import IMDb ia = IMDb() movie_name = "The Last of Us" # 限定搜索结果为剧集(tv类型) results = ia.search_movie(movie_name, results='tv') if not results: print("没找到对应剧集") exit() # 获取正确的剧集ID movie_id = results[0].getID() # 获取剧集详情,包含基础信息 movie = ia.get_movie(movie_id)
2. 提取所需的剧集及单集字段
调用update方法加载剧集信息,然后遍历季和集提取数据:
# 加载剧集的所有季/集数据 ia.update(movie, 'episodes') # 遍历每一季 for season_num, episodes in movie['episodes'].items(): # 遍历该季的每一集 for episode_num, episode in episodes.items(): # 提取你需要的字段,没有的字段用默认值填充 extracted_data = { 'title': movie['title'], # 剧集标题 'year': movie['year'], # 剧集播出年份 'rating': movie.get('rating', '暂无评分'), # 剧集整体评分 'season': season_num, # 季数 'episode_number': episode_num, # 集数 'episode_title': episode['title'],# 单集标题 'episode_rating': episode.get('rating', '暂无评分'), # 单集评分 'genres': movie.get('genres', []) # 剧集类型 } # 打印或保存数据 print(extracted_data)
关键说明
- 用
results='tv'过滤搜索结果,避免拿到电影、综艺等非剧集内容,确保ID正确。 - 使用
ia.update(movie, 'episodes')加载剧集的季/集数据,比直接调用get_movie_episodes更稳妥。 - 用
get()方法获取字段,避免因为部分信息缺失导致报错。
内容的提问来源于stack exchange,提问作者zedmahdi
相关产品推荐
相关产品推荐

