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

JavaScript批量拉取美国议员JSON文件合并遇CORS错误求解

跨域拉取美国议员JSON数据解决方案

问题本质

你遇到的报错是浏览器同源策略导致的CORS限制,只有在浏览器环境运行的前端JS发起请求时才会触发,所有前端调用的fetch、d3.json方法都会被该规则拦截,设置no-cors也只能拿到opaque类型的空响应,无法读取实际数据。

可行方案

方案1:本地服务端脚本爬取(最推荐,适合批量拉取)

直接使用Python、Node.js等本地脚本发起请求,不受浏览器同源策略限制,可直接完成拉取、处理、合并导出全流程,示例Python代码如下:

import requests
import json
import time

# 补全所有需要拉取的议员ID
member_ids = ["F000061", "F000062", "F000063", "F000064", "F000091", "F000092"]
base_url = "https://bioguide.congress.gov/search/bio/{}.json"
all_members = []

for mid in member_ids:
    try:
        resp = requests.get(
            base_url.format(mid),
            # 模拟浏览器UA避免被拦截
            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"
            },
            timeout=15
        )
        resp.raise_for_status()
        all_members.append(resp.json())
        print(f"已完成ID:{mid} 拉取")
        # 控制请求频率,避免被封IP
        time.sleep(1)
    except Exception as e:
        print(f"ID:{mid} 拉取失败,错误信息:{str(e)}")

# 导出整合后的全量JSON文件
with open("congress_members_full.json", "w", encoding="utf-8") as f:
    json.dump(all_members, f, ensure_ascii=False, indent=2)

运行前需先安装依赖:pip install requests

方案2:CORS代理(适合必须在前端环境运行的场景)

在请求URL前拼接CORS代理服务前缀,代理服务会在返回结果中添加跨域头,即可绕过浏览器限制:

// 可使用本地搭建的代理,或者公共CORS代理(公共代理稳定性无保障)
const proxy = "https://cors-anywhere.azm.workers.dev/"
const url = "https://bioguide.congress.gov/search/bio/F000061.json"

fetch(proxy + url)
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err))

方案3:浏览器跨域插件(适合临时测试)

安装Chrome/Edge插件「Allow CORS: Access-Control-Allow-Origin」,开启后即可直接在前端发起请求,无需修改代码。

注意事项

  • 批量拉取时请控制请求频率,避免对目标站点服务器造成压力,触发IP封禁
  • 该站点数据为公开数据,拉取请遵守相关使用规范

内容的提问来源于stack exchange,提问作者console.log

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:00