如何构造循环实现API多页请求遍历 拼接追加各页返回数据
多页爬取实现方案
核心实现逻辑分4步:
- 初始化空列表存储所有页面的汇总结果
- 构造页码循环,每次请求前动态修改payload中的
page参数为当前页码 - 每次请求拿到响应后解析数据,追加到总结果列表
- 增加空页判断逻辑,遇到无数据的页面直接终止循环,避免发送无效请求,同时加合理请求间隔避免触发接口频率限制
完整可运行代码
import requests import time # 接口基础配置 url = "https://indeed11.p.rapidapi.com/" headers = { "content-type": "application/json", "X-RapidAPI-Key": "{替换为你自己的API密钥}", "X-RapidAPI-Host": "indeed11.p.rapidapi.com" } # 搜索配置 max_page = 10 # 自定义要爬取的最大页数,可根据实际需求调整 search_keyword = "data visualization" search_location = "New York City, NY" all_jobs = [] # 存储全量职位数据 for current_page in range(1, max_page + 1): # 动态构造当前页的请求参数 payload = { "search_terms": search_keyword, "location": search_location, "page": current_page, "fetch_full_text": "yes" } # 发送请求 response = requests.request("POST", url, json=payload, headers=headers) # 解析响应为JSON格式,注意根据实际返回结构调整取值路径 page_data = response.json() # 空页判断:如果当前页无职位数据,直接终止循环 if not page_data: print(f"第{current_page}页无数据,爬取终止") break # 将当前页数据追加到总结果中 # 如果返回结构是嵌套的,比如职位列表在data字段下,就改成all_jobs.extend(page_data['data']) all_jobs.extend(page_data) print(f"第{current_page}页爬取完成,累计获取{len(all_jobs)}条职位数据") # 加1秒请求间隔,避免触发频率限制 time.sleep(1) # 最终all_jobs就是所有页面拼接完成的全量职位数据 print(f"爬取结束,共获取{len(all_jobs)}条有效职位数据")
注意事项
- 代码中
X-RapidAPI-Key字段需要替换为你自己在RapidAPI平台申请的有效密钥,否则接口会返回鉴权失败 - 首次运行建议先把
max_page设为1,打印page_data确认接口返回的结构,如果职位数据是嵌套在某个字段下(比如常见的data、jobs字段),需要调整追加数据时的取值路径 - 请求间隔可根据你自己的API套餐配额调整,如果是付费高配额套餐可以适当缩短间隔,免费套餐建议保持1秒以上间隔避免被临时封禁
- 如果接口返回结果中包含总结果数/总页数字段,可以不用硬编码
max_page,直接取返回的总页数作为循环终止条件即可
内容的提问来源于stack exchange,提问作者SteadyGrow99
相关产品推荐
相关产品推荐

