将普查批量地理编码器与python请求库一起使用

将普查批量地理编码器与python请求库一起使用,python,python-requests,geocoding,census,Python,Python Requests,Geocoding,Census,我正在试验人口普查批量地理编码API 以下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/

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

以下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

我显然没有发送一个格式良好的请求,只收到“有一个内部错误”的响应。你知道我在提出这个请求时做错了什么吗?

明白了!结果表明,地理位置请求类型需要一些位置类型没有的参数。工作解决方案:

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

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

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)

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

您将在数据框中获得一个干净的输出:)
参考:


结果是在同一时间做同一件事。刚刚尝试用你的代码和我的csv快速剪切粘贴,它返回了
状态\u code
200
。您的CSV中可能存在数据问题-通过将数据上载到此处来检查数据:并查看它是否在此处工作。它总是返回
statuscode
200
,但如果您检查它仍然包含的响应“有一个内部错误。我已经通过上面的curl示例提交csv来验证它是否有效。我想我只是没有将请求正确格式化以匹配curl示例。这对您现在仍然有效吗?我收到SSL握手错误。如果你有任何建议,我将不胜感激@vikjam-现在对我不起作用。如果您有解决方案,请分享。
# 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