如何利用Zenserp API获取10000条Google SERP搜索结果?
用Zenserp API批量获取10000条搜索结果URL
要拿到10000条结果,核心是靠分页循环请求——利用API的start参数控制每次请求的起始位置,每次拉取100条,直到累计结果数达到10000或无更多结果返回。
实现思路
- 初始化结果列表和起始偏移量
start为0 - 循环发送请求:每次请求后将
start递增100,直到累计结果≥10000或API返回空结果 - 添加请求延迟,避免触发API限流机制
- 提取并保存每条结果的URL
修改后的完整代码
import requests import time # 基础配置 API_KEY = "xxxxxxx" SEARCH_QUERY = "cat videos" SEARCH_TYPE = "vid" PER_PAGE = 100 TARGET_TOTAL = 10000 headers = {"apikey": API_KEY} all_urls = [] start_offset = 0 while len(all_urls) < TARGET_TOTAL: params = { "q": SEARCH_QUERY, "tbm": SEARCH_TYPE, "num": PER_PAGE, "start": start_offset } try: response = requests.get('https://app.zenserp.com/api/v2/search', headers=headers, params=params) response.raise_for_status() # 捕获HTTP状态码错误 response_data = response.json() # 提取视频结果的URL(对应Zenserp返回的结构) if "video_results" in response_data: batch_urls = [item["link"] for item in response_data["video_results"]] all_urls.extend(batch_urls) # 如果当前批次不足100条,说明已到最后一页 if len(batch_urls) < PER_PAGE: print("已获取全部可用结果,提前结束") break else: print("无更多结果返回,终止循环") break print(f"当前累计获取 {len(all_urls)} 条URL") start_offset += PER_PAGE time.sleep(1) # 加1秒延迟,避免触发API限流 except requests.exceptions.RequestException as e: print(f"请求出错: {str(e)}") break # 保存结果到本地文件 with open("cat_video_urls.txt", "w", encoding="utf-8") as f: # 确保只保存前10000条 for url in all_urls[:TARGET_TOTAL]: f.write(url + "\n") print(f"任务完成,共保存 {min(len(all_urls), TARGET_TOTAL)} 条URL")
关键注意事项
- 限流问题: Zenserp有请求频率限制,根据你的套餐调整
time.sleep()的时长,避免被临时封禁 - 结果上限: 实际搜索结果可能不足10000条,代码会自动检测并终止循环
- 结构适配: 要对应Zenserp实际返回的JSON结构提取字段,示例中用
video_results和link,若API返回结构变动需同步调整 - 错误处理: 代码包含基础的HTTP错误捕获,可根据需求扩展异常处理逻辑
内容的提问来源于stack exchange,提问作者Auroshikha Dasgupta
相关产品推荐
相关产品推荐

