You need to enable JavaScript to run this app. 使用IMDbPY遍历全演员表批量获取所有演员个人参演作品的实现求助
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 12:45:03