做素材采集、电商选品、竞品图片监控的朋友,应该都遇到过这种需求:按关键词把谷歌图片结果批量抓下来——拿到图片 URL、来源页面、所属网站。这篇教大家用谷歌图片搜索 API 自动化完成,返回的是结构化 JSON,不需要解析网页,代码可直接复制。
图片采集要拿什么数据
谷歌图片结果页,每条结果包含:
- 图片 URL:原图地址(
image_url) - 缩略图 URL:小图地址(
thumbnail_url) - 标题:图片的标题或 alt 文本
- 来源页面:图片所在网页的链接(
link) - 来源域名:所属网站(
domain)
拿到这五样,素材库、选品表格、竞品图库都能建起来。
接口与准备
我用的接口是 SerpBase(官网 serpbase.dev)的/google/images端点,POST JSON +X-API-Key认证。注册送 100 次免费搜索,不需要绑卡,够把流程跑通。
一个注意点:图片端点每次扣 2 credits(比网页搜索贵一倍),批量前先小样本验证再放大。
第一步:抓一个关键词的图片
核心接口:POST https://api.serpbase.dev/google/images
importrequests API_KEY="在这里填你的Key"URL="https://api.serpbase.dev/google/images"resp=requests.post(URL,headers={"Content-Type":"application/json","X-API-Key":API_KEY},json={"q":"iphone 15 pro blue","hl":"en","gl":"us","page":1},timeout=30,)data=resp.json()forimgindata.get("images",[])[:10]:print(img.get("rank"),"|",img.get("title"))print(" 图片:",img.get("image_url"))print(" 来源页:",img.get("link"))print(" 域名:",img.get("domain"))print()返回的images数组里,每条结果带image_url、thumbnail_url、title、link、domain、rank。一次请求,图片列表就齐了。
第二步:批量下载图片(只存元数据更省心)
图片 URL 直接请求下载会慢、会占带宽。更稳妥的做法是先只存元数据(URL、来源、标题),需要时再按需下载:
importrequestsimportcsv API_KEY="在这里填你的Key"URL="https://api.serpbase.dev/google/images"deffetch_images(keyword,hl="en",gl="us"):resp=requests.post(URL,headers={"Content-Type":"application/json","X-API-Key":API_KEY},json={"q":keyword,"hl":hl,"gl":gl},timeout=30,)returnresp.json().get("images",[])# 多关键词批量keywords=["iphone 15 pro blue","macbook air","apple watch"]rows=[]forkwinkeywords:forimginfetch_images(kw):rows.append([kw,img.get("title",""),img.get("image_url",""),img.get("link",""),img.get("domain",""),])print(f"{kw}:{len(rows)}条(累计)")withopen("images.csv","w",newline="",encoding="utf-8-sig")asf:writer=csv.writer(f)writer.writerow(["关键词","标题","图片URL","来源页","域名"])writer.writerows(rows)print(f"已导出{len(rows)}条图片元数据")utf-8-sig保证 Excel 打开不乱码。
第三步:按需下载原图
如果确实要下载原图,建议加节流和失败处理(图片端点失败同样自动退 credits):
importtimeimportrequestsdefdownload_image(url,save_path,timeout=30):try:resp=requests.get(url,timeout=timeout)ifresp.status_code==200:withopen(save_path,"wb")asf:f.write(resp.content)returnTrueexceptException:passreturnFalse# 示例:下载前 5 张fori,imginenumerate(images[:5]):ok=download_image(img["image_url"],f"img_{i}.jpg")print(f"img_{i}.jpg:{'成功'ifokelse'失败'}")time.sleep(0.5)# 控制节奏注意:下载图片本身不消耗 API credits(只有搜索请求扣),但注意图片版权,商用需谨慎。
费用与建议
/google/images每次2 credits- 注册送 100 次免费搜索 = 约 50 次图片搜索,够测一个完整流程
- 标准包 $10 买 2 万次($0.50/千次),永不过期;图片按 2 credits 算,约合 $1/千次
- 批量前先小样本验证字段是否齐全,再放大规模
常见问题
Q:thumbnail_url和image_url有时是空的?
A:这两个字段是可选的,有的结果只给一个,代码里用.get()兜底就行。
Q:能采集图片所在网站的信息吗?
A:图片返回里有link(来源页)和domain(域名),要更深的网页信息可以配合/google/search再查。
Q:图片能直接商用吗?
A:版权取决于图片本身,采集到的是 URL 和元数据,是否可用请自行确认授权。
结语
图片采集的核心价值在「元数据先行」——先拿到 URL、来源、域名列表,按需再下载,成本和风险都可控。用 API 拿结构化 JSON,比解析图片搜索页快一个数量级。
完整参数见 SerpBase 官方文档。先跑通第一步,看看你能抓到什么图。