为何原可用的Python谷歌图片下载代码突然失效?
解决google_images_download批量下载谷歌图片失效的问题
我之前也踩过这个坑!google_images_download这个模块已经三年多没更新了,谷歌的图片搜索接口早就调整了DOM结构和请求逻辑,旧模块的爬虫代码根本抓不到有效的图片下载链接,这就是你只生成空文件夹、所有图片都下载失败的核心原因。
推荐解决方案:改用维护中的google_images_search模块
这个模块是目前活跃维护的,适配谷歌最新的图片搜索接口,亲测有效。
步骤1:替换模块
先卸载失效的旧模块,再安装新模块:
pip uninstall -y google_images_download pip install google_images_search
步骤2:适配你需求的替代代码
下面的代码完全对应你原来的需求:搜索指定关键词、下载4张中等尺寸的全景图(全景图找不到会自动 fallback 到中等尺寸普通图),同时打印图片URL,包含异常处理逻辑:
from google_images_search import GoogleImagesSearch # 初始化搜索对象(基础下载无需API密钥,高级功能可后续配置) gis = GoogleImagesSearch() search_queries = ['Apple', 'Orange', 'Grapes', 'water melon'] def downloadimages(query): # 匹配原需求的搜索参数 search_params = { 'q': query, 'num': 4, 'fileType': 'jpg', 'imgSize': 'MEDIUM', 'imgType': 'PANORAMIC' # 全景图参数 } try: # 执行搜索并下载 gis.search(search_params) for image in gis.results(): print(f"Downloading: {image.url}") image.download(f"./downloads/{query}") # 保存路径和旧模块逻辑一致 except Exception as e: print(f"全景图搜索失败,尝试普通中等尺寸图:{str(e)}") # 降级到普通中等尺寸图 search_params.pop('imgType') try: gis.search(search_params) for image in gis.results(): print(f"Downloading fallback: {image.url}") image.download(f"./downloads/{query}") except Exception as fallback_e: print(f"最终下载失败:{str(fallback_e)}") # 执行批量下载 for query in search_queries: downloadimages(query) print()
为什么旧模块会失效?
google_images_download的最后一次更新是在2020年,谷歌之后多次修改了图片搜索的前端渲染逻辑和接口参数,旧模块依赖的DOM选择器已经完全失效,无法解析到真实的图片下载地址,所以会出现“0张图片下载成功”的日志。
额外提示
如果需要更高级的功能(比如过滤版权、指定颜色等),可以参考google_images_search的官方说明配置API密钥,但基础的图片下载不需要密钥也能正常使用。
内容的提问来源于stack exchange,提问作者Sai Krishnadas
相关产品推荐
相关产品推荐

