调用API接口是Python爬虫获取结构化数据最高效合规的方式,需抓包分析URL与请求方式,构造含认证的合法请求,解析响应时做好异常防护,并控制频率、保存结果、处理分页。

调用API接口是Python爬虫开发中获取结构化数据最高效、最合规的方式之一。相比解析HTML页面,直接请求API通常返回JSON格式数据,解析简单、稳定性高、反爬压力小。
确认API地址与请求方式
很多网站的API并非公开文档化,需要通过浏览器开发者工具(Network标签页)抓包分析。重点关注XHR或Fetch请求,筛选出含目标数据的接口URL,并观察其请求方法(GET/POST)、是否带查询参数(?key=value)或请求体(payload)。
- 右键“Copy → Copy as cURL”,再用在线工具转成Python requests代码,快速复现请求
- 注意URL中可能隐藏动态参数(如时间戳、随机字符串),需同步提取或模拟生成
- 部分接口需Referer、Origin等请求头才能正常响应,漏掉会返回403或空数据
构造合法请求并处理认证
不少API要求身份验证,常见形式包括:API Key放在Header(如Authorization: Bearer xxx)、URL参数(?token=xxx)、或Cookie登录态。未正确携带认证信息,大概率返回401或错误提示。
- 使用requests.get(url, headers=headers, params=params)发送GET请求
- POST请求用requests.post(url, json=data)(自动设Content-Type为application/json)或data=dict传表单数据
- 敏感凭证(如token)不要硬编码,建议从环境变量读取:os.getenv("API_TOKEN")
解析响应并异常防护
成功请求后,先检查response.status_code == 200,再用response.json()解析。但实际中常遇到:返回非JSON(如HTML错误页)、字段缺失、嵌套层级深、编码异常等问题。
立即学习“Python免费学习笔记(深入)”;
- 加try...except JSONDecodeError捕获解析失败,打印response.text[:200]辅助排查
- 用response.raise_for_status()统一抛出HTTP错误(4xx/5xx)
- 对关键字段做存在性判断,例如data.get("result", []).get("items", [])避免KeyError
控制频率与保存结果
即使走API,高频请求仍可能触发限流(429 Too Many Requests)或IP封禁。合理设置延迟、使用Session复用连接、分批请求能显著提升稳定性。
- 每次请求后time.sleep(0.5),避免短时密集调用
- 用with open("data.json", "w", encoding='utf-8') as f:保存结构化结果,便于后续分析
- 对分页接口,循环更新params["page"]或解析响应中的next_url,直到无新数据
基本上就这些。API爬虫不复杂但容易忽略细节——地址是否动态、头是否完整、状态是否校验、字段是否可空。动手前多看几遍响应内容,比写十行代码更管用。










