【问题标题】:Using Census Bulk Geocoder with python requests library将 Census Bulk Geocoder 与 python 请求库一起使用
【发布时间】:2019-12-21 00:07:31
【问题描述】:

我正在试验人口普查批量地理编码 API documentation

以下 curl 命令有效:

curl --form addressFile=@Addresses.csv --form benchmark=9 http://geocoding.geo.census.gov/geocoder/locations/addressbatch --output geocoderesult.csv

但是当我尝试将此移植到 python 请求时:

url = 'http://geocoding.geo.census.gov/geocoder/geographies/addressbatch'
payload = {'benchmark':9}
files = {'addressFile': ('Addresses.csv', open('Addresses.csv', 'rb'), 'text/csv')}
r = requests.post(url, files=files, data = payload)
print r.text

我显然没有发送格式正确的请求,只是收到“出现内部错误”作为响应。知道我在形成这个请求时做错了什么吗?

【问题讨论】:

  • 结果是同时在做同样的事情。刚刚尝试使用您的代码和我的 csv 进行快速剪切和粘贴,它返回了 status_code200。可能是您的 CSV 中的数据问题 - 通过在此处上传数据来检查您的数据:geocoding.geo.census.gov/geocoder/locations/addressbatch?form 并查看它是否在那里工作。
  • 它总是返回 statuscode200,但是如果您检查响应,它仍然包含“存在内部错误。我已通过通过上面的 curl 示例。我想我只是没有正确格式化请求以匹配 curl 示例。

标签: python python-requests geocoding census


【解决方案1】:

知道了!事实证明,地理请求类型需要一些位置类型不需要的参数。工作解决方案:

url = 'http://geocoding.geo.census.gov/geocoder/geographies/addressbatch'
payload = {'benchmark':'Public_AR_Current','vintage':'ACS2013_Current'}
files = {'addressFile': ('Addresses.csv', open('Addresses.csv', 'rb'), 'text/csv')}
r = requests.post(url, files=files, data = payload)
print r.text

【讨论】:

  • 这些天这仍然对您有用吗?我收到 SSL 握手错误。如果您有任何建议,将不胜感激!
  • @vikjam - 现在对我不起作用。如果您有解决方案,请分享。
【解决方案2】:

也许这是做同样事情的一种更简单的方法。

您将在 pandas 数据框中获得干净的输出 :)

# pip install censusgeocode    

import censusgeocode
import pandas as pd

cg = censusgeocode.CensusGeocode(benchmark='Public_AR_Census2010',vintage='Census2010_Census2010')
k = cg.addressbatch('D:\WORK\Addresses.csv')

# Bonus
# Get clean output in Dataframe

df = pd.DataFrame(k, columns=k[0].keys())

# PS: I tried with 9990 records in single batch

参考:

https://pypi.org/project/censusgeocode/

https://geocoding.geo.census.gov/geocoder/benchmarks

https://geocoding.geo.census.gov/geocoder/vintages?form

https://geocoding.geo.census.gov/geocoder/geographies/addressbatch?form

【讨论】:

    【解决方案3】:

    效果很好。今天我只是使用了下面显示的代码。

    url = 'https://geocoding.geo.census.gov/geocoder/locations/addressbatch'
    payload = {'benchmark':'Public_AR_Current','vintage':'ACS2013_Current'}
    files = {'addressFile': ('19067.csv', open('19067.csv', 'rb'), 'text/csv')}
    r = requests.post(url, files=files, data = payload)
    

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2023-03-23
      • 2016-05-09
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多