如何修改现有Python代码实现从谷歌图片批量爬取1000张图片
问题修复方案
核心报错原因
- 你的
fetch_image_urls函数中,for循环遍历缩略图的else分支里有一行无返回值的return,且位置在加载更多按钮逻辑之前,导致首次遍历完当前页所有缩略图后直接退出函数返回None,同时点击加载更多的代码完全无法执行,这就是你触发NoneType不可迭代报错、也无法爬取超过200张图片的直接原因。 - 额外的冗余操作:调用
fetch_image_urls前你额外访问谷歌首页输入关键词搜索的操作是多余的,函数内部已经构造了专用的图片搜索URL,重复操作可能导致页面状态异常。
需修改的代码片段
1. 修复fetch_image_urls函数的else分支逻辑
将原函数中for循环对应的else块替换为如下代码:
else: print("Found:", len(image_urls), "image links, looking for more ...") time.sleep(3) # 等待页面加载完成,无需等待30秒 # 删除原有的多余return语句 try: load_more_button = wd.find_element_by_css_selector(".mye4qd") if load_more_button and load_more_button.is_displayed(): wd.execute_script("document.querySelector('.mye4qd').click();") time.sleep(2) # 点击加载更多后等待新内容加载 except Exception: print(f"无更多搜索结果,当前关键词共收集到{len(image_urls)}张图片链接") break # 没有更多内容时退出循环
原有逻辑已支持无论是否爬满目标数量都返回已收集的image_urls集合,仅删除多余return即可。
2. 优化调用逻辑,删除冗余操作+增加反爬配置
修改调用部分的代码如下:
op = webdriver.ChromeOptions() op.add_argument('headless') # 增加UA伪装,避免被谷歌识别为爬虫限制返回结果数量 op.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36') wd = webdriver.Chrome(options=op, executable_path=DRIVER_PATH) queries = tags images_path = 'scraped_photos_test' # 提前创建根目录避免重复判断 if not os.path.exists(images_path): os.mkdir(images_path) for query in queries: # 删除冗余的谷歌首页搜索操作,直接调用爬取函数 links = fetch_image_urls(query,1000,wd) # 增加非空判断避免报错 if not links: print(f"关键词{query}未爬取到任何图片,跳过") continue for i in links: persist_image(images_path,query,i) wd.quit()
额外注意事项
- 谷歌图片单个关键词的搜索结果上限通常为400~800张,若需爬满1000张,可拆分多个语义相近的关键词分别爬取后合并结果。
- 可适当调大
sleep_between_interactions参数,避免操作频率过高被谷歌临时限制访问。
内容的提问来源于stack exchange,提问作者Ravish Jha
相关产品推荐
相关产品推荐

