使用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
相关产品推荐
相关产品推荐

