做素材采集、电商选品、竞品图片监控的朋友,应该都遇到过这种需求:按关键词把谷歌图片结果批量抓下来——拿到图片 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
import requests
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()
for img in data.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、来源、标题),需要时再按需下载:
import requests
import csv
API_KEY = "在这里填你的Key"
URL = "https://api.serpbase.dev/google/images"
def fetch_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,
)
return resp.json().get("images", [])
# 多关键词批量
keywords = ["iphone 15 pro blue", "macbook air", "apple watch"]
rows = []
for kw in keywords:
for img in fetch_images(kw):
rows.append([
kw,
img.get("title", ""),
img.get("image_url", ""),
img.get("link", ""),
img.get("domain", ""),
])
print(f"{kw}: {len(rows)} 条(累计)")
with open("images.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["关键词", "标题", "图片URL", "来源页", "域名"])
writer.writerows(rows)
print(f"已导出 {len(rows)} 条图片元数据")
utf-8-sig 保证 Excel 打开不乱码。
第三步:按需下载原图
如果确实要下载原图,建议加节流和失败处理(图片端点失败同样自动退 credits):
import time
import requests
def download_image(url, save_path, timeout=30):
try:
resp = requests.get(url, timeout=timeout)
if resp.status_code == 200:
with open(save_path, "wb") as f:
f.write(resp.content)
return True
except Exception:
pass
return False
# 示例:下载前 5 张
for i, img in enumerate(images[:5]):
ok = download_image(img["image_url"], f"img_{i}.jpg")
print(f"img_{i}.jpg: {'成功' if ok else '失败'}")
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 官方文档。先跑通第一步,看看你能抓到什么图。
&spm=1001.2101.3001.5002&articleId=163990210&d=1&t=3&u=d3a47a7c0837449cb96395e174c7ec0e)
4071

被折叠的 条评论
为什么被折叠?



