使用IMDbPY遍历全演员表批量获取所有演员个人参演作品的实现求助
批量实现核心思路
你拿到的full_cast列表里的每一个元素本身就是演员的Person类实例,直接自带对应的IMDb人物ID,根本不需要手动逐个查找演员ID,只要把之前单名演员的作品拉取逻辑抽成公共函数,循环遍历整个cast列表执行就行。
可直接复用的代码实现
注意:代码默认你已经初始化好IMDbPY的连接实例
ia = imdb.IMDb(),和你之前用来拉取电影演职员表的实例是同一个,不要重复新建连接避免额外初始化开销
import time # 第一步:拉取目标作品的全演员列表(和你现有逻辑保持一致) target_movie = ia.get_movie('0203259', 'full credits') full_cast = target_movie['cast'] # 第二步:把单演员作品拉取逻辑封装成公共函数 def fetch_actor_filmography(actor_obj): # 直接用cast列表里自带的personID拉取完整人物信息 full_actor_info = ia.get_person(actor_obj.personID) film_list = [] # 遍历该演员所有任职类型下的作品 for job_type, works in full_actor_info.get('filmography', {}).items(): for work in works: film_list.append({ "job": job_type, "work_id": work.movieID, "work_title": work['title'], "role": str(work.currentRole) }) return { "actor_name": actor_obj['name'], "actor_id": actor_obj.personID, "all_works": film_list } # 第三步:批量遍历所有演员拉取信息 all_actors_data = [] for index, cast_entry in enumerate(full_cast): print(f"进度:{index+1}/{len(full_cast)},正在处理演员:{cast_entry['name']}") # 加异常捕获,避免单个演员条目异常导致整个程序中断 try: actor_result = fetch_actor_filmography(cast_entry) all_actors_data.append(actor_result) except Exception as e: print(f"拉取{cast_entry['name']}的信息失败,跳过。错误详情:{str(e)}") # 加请求间隔,避免触发IMDb的访问限流 time.sleep(0.8)
实际运行的注意事项
- 如果目标电影的演员数量很多,一定要保留代码里的请求间隔,连续高频请求会被IMDb临时限制访问,通常需要等待几十秒才能恢复正常访问
- 拉取到的全量数据可以直接转成JSON格式存储到本地,下次使用不用重复发起网络请求
- 部分冷门演员的条目存在字段缺失的问题,直接强行取角色、作品字段会触发KeyError,代码里的异常捕获已经覆盖了这类场景,单条错误不会影响整个批量流程的运行
内容的提问来源于stack exchange,提问作者tangerine7199
相关产品推荐
相关产品推荐

