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

使用GET请求调用API爬取网页时遭遇Validation Error问题求助

解决API 403权限错误的方案

你遇到的403错误是因为目标API设置了反爬验证,仅允许来自网站自身上下文的请求。以下是具体解决步骤:

1. 添加浏览器请求头并维护会话

API会验证请求的来源和环境,需要模拟浏览器的请求头,同时通过会话携带网站设置的Cookie。修改后的代码如下:

import requests
import time
from datetime import date

clinic_data = {}
column_names = ["Name", "Address", "City", "State", "Zipcode", "Email", "Phone Number", "Specialties"]

coordinates = [
    (40.750742, -73.99653),    # 10001 (New York, NY)
    (33.973951, -118.248405),  # 90001 (Los Angeles, CA)
    (41.88531, -87.621238),    # 60601 (Chicago, IL)
    (29.775186, -95.31022),    # 77001 (Houston, TX)
    (25.787676, -80.224145)   # 33101 (Miami, FL)
]

zipcodes = [
    "10001",  # New York, NY
    "90001",  # Los Angeles, CA
    "60601",  # Chicago, IL
    "77001",  # Houston, TX
    "33101"  # Miami, FL
]

# 模拟Chrome浏览器的请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Referer": "https://www.dysportusa.com/find-a-specialist",
    "Accept": "application/json, text/plain, */*"
}

# 创建会话,先访问目标页面获取Cookie
session = requests.Session()
session.get("https://www.dysportusa.com/find-a-specialist", headers=headers)

for i in range(len(coordinates)):
    latitude = coordinates[i][0]
    longitude = coordinates[i][1]
    zipcode = zipcodes[i]

    api_url = f"https://www.dysportusa.com/api/find-a-specialist?latitude={latitude}&longitude={longitude}&take=100&radius=150&zipToSortBy={zipcode}"
    try:
        # 用会话发送请求,自动携带Cookie和请求头
        r = session.get(api_url, headers=headers).json()
        print(r)
        # 添加1秒延迟,避免请求过快触发拦截
        time.sleep(1)
    except Exception as e:
        print(f"第{i+1}次请求失败: {str(e)}")
        continue

2. 关键验证项说明

  • User-Agent:伪装成标准浏览器,避免被识别为爬虫脚本;
  • Referer:证明请求是从目标网站的find-a-specialist页面发起的,符合API的访问上下文要求;
  • Session会话:先访问页面获取网站设置的会话Cookie,API可能依赖这些Cookie验证用户合法性;
  • 请求延迟:短时间内大量请求会触发网站的频率拦截,添加time.sleep()降低请求密度。

3. 额外排查方向

如果上述方法仍无效,打开浏览器开发者工具(F12),切换到Network标签,找到网站调用API的请求,对比你的请求头是否缺少其他字段(比如X-Requested-With、CSRF Token等),将缺失的字段补充到请求头中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:23:15