You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SerpApi谷歌图片爬虫执行约40次搜索后触发KeyError 'original'

解决Google图片搜索API返回KeyError 'original'问题

运行Python代码时出现Exception has occurred: KeyError 'original'错误:每次查询可成功获取约100个图片URL,但执行到第40次查询(如示例中的Van Taylor)时突然终止,且查询的人名格式无异常。代码从多个.txt文件读取人名列表,为每个人物查询约100张相关图片URL,代码片段如下:

def get_image_urls(query, key):
    params = {
      "q": query,
      "tbm": "isch",
      "ijn": "0",
      "api_key": key
    }

    search = GoogleSearch(params)
    results = search.get_dict()
 
    image_urls = [image["original"] for image in results["images_results"]]
    return image_urls

image_urls_dict = {}
for file in file_names:
    with open(file, 'r') as f:
        for person in f:
            
            name = person.strip()
            print(name)
            image_urls_dict[name] = get_image_urls(name, api_key)

示例人名列表:

Carolyn B. Maloney
Tommy Tuberville
Cheri Bustos
Ritchie Torres
Rashida Tlaib
Kathy E. Manning
John Katko
Michael Cloud  
Hakeem S. Jeffries
Van Taylor <---- 在此处失败
Elijah Crane...

问题原因

出现KeyError是因为某次搜索返回的images_results中,存在部分图片条目没有original字段——可能是图片被移除、权限限制,或是API返回结果格式临时异常。此外,频繁调用API可能触发限制,导致返回结果不完整。

解决方案

1. 安全获取字段,过滤无效条目

修改get_image_urls函数,用字典存在性检查避免直接取键报错,同时过滤掉没有original字段的条目:

def get_image_urls(query, key):
    params = {
      "q": query,
      "tbm": "isch",
      "ijn": "0",
      "api_key": key
    }

    search = GoogleSearch(params)
    results = search.get_dict()
 
    # 先确保images_results存在,避免KeyError
    images_results = results.get("images_results", [])
    # 只保留包含original字段的图片URL
    image_urls = [image["original"] for image in images_results if "original" in image]
    return image_urls

2. 增加全局异常捕获,避免程序终止

在遍历人名的循环中加入异常处理,即使单个人名查询失败,程序也能继续执行:

image_urls_dict = {}
for file in file_names:
    with open(file, 'r') as f:
        for person in f:
            name = person.strip()
            print(name)
            try:
                image_urls_dict[name] = get_image_urls(name, api_key)
            except Exception as e:
                print(f"查询{name}时出错: {str(e)}")
                image_urls_dict[name] = []  # 用空列表记录该人物无有效URL

3. 检查API调用限制

查看Google Search API的调用配额,确认是否因调用次数超限导致返回结果异常。如果是,可调整调用频率(比如加入短暂延时)或提升配额。

内容的提问来源于stack exchange,提问作者Noey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:32:36