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

问题描述 投票:4回答:3

我正在尝试进行人口普查地理编码API documentation

以下卷曲命令有效:

curl --form [email protected] --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

我显然不是在发送格式正确的请求,而只是在响应中接收到“存在内部错误”。知道我在提出此请求时做错了什么吗?

python python-requests geocoding census
3个回答
5
投票

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

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

0
投票

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

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)

0
投票

也许这是做相同事情的更简单方法。

您将在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

© www.soinside.com 2019 - 2024. All rights reserved.