如何通过Python API获取Mesa, AZ的Socrata全量数据集?
解决Socrata实例(Mesa, AZ)全量数据集获取问题
问题根源
你使用的/api/catalog/v1是Socrata Open Data Network的全局目录API,仅返回同步到全局网络的数据集(也就是你看到的41条),而非目标实例data.mesaaz.gov的本地全量数据集。
正确的本地数据集列表接口
每个Socrata实例都提供专属的本地元数据端点,用于获取该实例下的所有公开数据集:https://data.mesaaz.gov/api/views/metadata/v1
这个端点支持分页参数(offset和limit),可以遍历获取全量数据集。
Python实现示例
方式1:直接使用requests库
import requests base_url = "https://data.mesaaz.gov" endpoint = f"{base_url}/api/views/metadata/v1" offset = 0 limit = 100 all_datasets = [] while True: response = requests.get(endpoint, params={"offset": offset, "limit": limit}) response.raise_for_status() batch = response.json() if not batch: break all_datasets.extend(batch) offset += limit print(f"成功获取 {len(all_datasets)} 个数据集")
方式2:使用sodapy库(指定本地端点)
sodapy默认的datasets()方法调用的是全局catalog API,需手动指定本地元数据端点:
from sodapy import Socrata client = Socrata("data.mesaaz.gov", None) # 公开数据无需API密钥,传None即可 offset = 0 limit = 100 all_datasets = [] while True: batch = client.get("/api/views/metadata/v1", offset=offset, limit=limit) if not batch: break all_datasets.extend(batch) offset += limit print(f"成功获取 {len(all_datasets)} 个数据集")
后续操作
获取到数据集元数据后,可通过每个数据集的id字段,调用https://data.mesaaz.gov/resource/{dataset_id}.json接口获取具体数据内容。
内容的提问来源于stack exchange,提问作者Matt S
相关产品推荐
相关产品推荐

