【问题标题】:SODA API not returning all fields in data setSODA API 未返回数据集中的所有字段
【发布时间】:2020-12-14 17:58:59
【问题描述】:

我无法从 Socrata 开放数据网络获取数据集中的所有字段。我正在使用 urllib3 发出请求:

url = 'https://data.sfgov.org/resource/g8m3-pdis.json'
http = urllib3.PoolManager(ca_certs=certifi.where())
req = http.request_encode_url('GET', url)


data = json.loads(req.data.decode('utf-8'))

此请求返回数据集中除最后 6 个字段之外的所有字段。我尝试过使用

$select=*,*

声明我想检索哪些字段,但即使我指定了最后 6 个字段,它仍然遗漏了它们。

但是,当我使用

$limit

statement 并将其设置为大于 1000 我得到了一些我缺少的字段。但是,仍然不是全部。

确实有效的一件事是指定要抓取的行,所以如果我使用以下内容:

https://data.sfgov.org/resource/g8m3-pdis.json?ttxid=0000028-02-001

它将返回我正在寻找的所有字段。

我想我可以对所有 ttxid 字段发出请求,然后为每个字段发送一个单独的请求以获取所有字段,但必须有更好的方法来做到这一点。有人有什么想法吗?

【问题讨论】:

    标签: python urllib3 socrata soda


    【解决方案1】:

    似乎有许多字段经常为空白:locationbusiness_corridorlic_code_description 等。使用 JSON 文档时,Socrata 会在响应中省略空白字段(这与 CSV 端点不同)。

    看起来像默认调用https://data.sfgov.org/resource/g8m3-pdis.json,只是碰巧返回有空格的字段,因此不会出现。但是,当$limit 添加到默认值 1,000 之上时,API 恰好返回一些包含完整数据的行,因此该字段在有限的情况下出现。

    这也可以通过抓取没有所有字段的行来确认。 OP 展示了一个返回所有字段的示例:https://data.sfgov.org/resource/g8m3-pdis.json?ttxid=0000028-02-001

    但此示例有空白字段,因此在响应中省略:https://data.sfgov.org/resource/g8m3-pdis.json?ttxid=1079490-06-161

    解决此问题的一种方法是从 CSV 端点获取数据:https://data.sfgov.org/resource/g8m3-pdis.csv

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多