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

如何从目标JSON接口抓取并提取全部学校数据?

解决方案

1. 定位批量获取学校数据的API

你当前调用的是单个学校详情接口(URL中带uuid参数),要获取全量学校数据,需要找到网站加载学校列表的接口:

  • 打开Chrome开发者工具的Network面板,刷新网站首页后点击页面搜索按钮(无需输入关键词),观察XHR/fetch请求,会发现类似https://schulfinder.kultus-bw.de/api/schools/search的POST请求,这就是批量获取学校列表的接口。
  • 该接口的请求体通常包含分页、排序参数,示例payload如下:
{
  "page": 0,
  "size": 100,
  "sort": ["name", "asc"],
  "filters": {}
}

2. 批量获取数据的Python代码示例

以下代码模拟列表接口请求,遍历所有分页获取完整数据:

import requests
import json

# 批量学校列表接口URL
list_api_url = "https://schulfinder.kultus-bw.de/api/schools/search"
headers = {
    "Content-Type": "application/json",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

all_schools = []
current_page = 0
page_size = 100  # 每页获取数量,可根据API限制调整

while True:
    request_payload = {
        "page": current_page,
        "size": page_size,
        "sort": ["name", "asc"],
        "filters": {}
    }
    
    response = requests.post(list_api_url, headers=headers, json=request_payload)
    response_data = response.json()
    
    # 提取当前页的学校数据
    page_schools = response_data.get("content", [])
    if not page_schools:
        break  # 无更多数据,终止循环
    
    all_schools.extend(page_schools)
    current_page += 1
    print(f"已获取第 {current_page} 页,累计收集 {len(all_schools)} 所学校")

# 将全量数据保存到本地JSON文件
with open("bw_all_schools.json", "w", encoding="utf-8") as f:
    json.dump(all_schools, f, ensure_ascii=False, indent=2)

print("所有学校数据已保存至 bw_all_schools.json")

3. 补充说明

  • 请求头适配:如果请求被拦截,需从Network面板复制完整请求头(如Referer、X-Requested-With)添加到代码的headers中。
  • 分页参数调整:部分接口可能用offset/limit替代page/size,需根据实际请求参数修改。
  • 获取完整详情:列表接口返回的是精简数据,若需要单个学校的完整信息,可遍历列表中每个学校的uuid,调用你原有的单个学校API补充数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:25:56