You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python requests分页爬取API仅获取第1页数据问题咨询

问题修复方案

你的代码仅能获取第一页数据,核心是缺少分页终止判断、请求头不全、未做兼容处理导致的,按以下方式调整即可:

核心问题点

  • 硬编码循环到1000页,没有根据接口实际返回结果判断终止时机,超过最大页数后接口可能默认返回第一页内容
  • 请求头缺少基础标识,容易被接口反爬策略拦截,翻页请求被降级返回第一页
  • 未做字段容错、异常捕获,单条数据/单页请求出错就会导致整个程序终止
  • 未指定每页条数参数,部分接口默认page参数仅在传了page_size时才生效

修正后可运行代码

import requests
import time

headers = {
    'x-authorization': 'a422cc2a-31fb-4b4e-a1bd-a34b561adc6c',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
    'Accept': 'application/json, text/plain, */*'
}
# 补充page_size参数指定每页返回条数,可根据接口实际限制调整数值
url_template = "https://api-prod.grip.events/1/container/4368/search?search=&sort=name&order=asc&type_id=4907,4906,5265,4964,4904,1026,4908&page={page}&page_size=20"

with open("list.txt", "w", encoding="utf-8") as f:
    page = 1
    while True:
        print(f"正在抓取第{page}页...")
        try:
            resp = requests.get(
                url_template.format(page=page),
                headers=headers,
                timeout=15
            )
            resp.raise_for_status()
            result = resp.json()
            page_data = result.get("data", [])
            
            # 当前页无数据说明已经到最后一页,直接终止循环
            if not page_data:
                print(f"第{page}页无返回数据,抓取完成")
                break

            for item in page_data:
                # 用get取值避免单条数据缺字段导致程序崩溃
                line = "\t".join([
                    item.get("company_name", ""),
                    item.get("job_title", ""),
                    item.get("name", ""),
                    item.get("job_industry", "")
                ])
                f.write(line + "\n")
                print(line)

            # 如果接口返回了总页数字段,可以替换空数据判断逻辑,提前终止
            # meta = result.get("meta", {})
            # total_page = meta.get("last_page", 0)
            # if page >= total_page:
            #     print("已到最后一页,抓取完成")
            #     break

            page += 1
            # 加请求间隔避免触发限流
            time.sleep(1)
        except Exception as e:
            print(f"第{page}页抓取失败,错误:{str(e)},跳过继续")
            page += 1
            time.sleep(2)
            continue

仍无法翻页的排查方向

如果调整后还是只能拿到第一页,按以下顺序排查:

  • 手动在浏览器/接口工具里请求page=2、page=3的地址,确认返回内容是否和第一页一致。如果一致,说明该接口不是用page参数做分页,这类活动接口很多用cursor游标做分页标记,需要抓包看实际翻页请求的参数名
  • 核对接口返回的响应结构,分页元数据通常在meta/pagination节点下,确认实际的分页参数名、总页数是否符合预期
  • 检查当前授权账号的权限,部分接口的普通权限仅允许查看第一页数据
  • 对比官方客户端/浏览器翻页时的请求头,补全缺失的Referer/Origin等头信息,部分接口会校验请求来源,校验不通过时固定返回第一页内容

内容的提问来源于stack exchange,提问作者Tori Elstrom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:12:34