首页 > 解决方案 > 拉取美国人口普查 API 时的 400 状态码

问题描述

我想使用人口普查 API 来提取与 CB1100A11 表相同的就业数据(附截图)。该表的每一行代表一个不同的 2 位数 NAICS 扇区。尽管构建此表完全是另一项任务,但当我包含其他变量时,我似乎无法获取 API 数据。

我在人口普查局提供的每个示例网址上都取得了成功,但我自己的网址却没有取得任何成功。我在下面包含了一个代码片段,减去我的密钥,以显示它的样子。我在 Jupyter Notebooks 和 BeautifulSoup 的 BS4 中使用 Python 3。

我已经查阅了API 用户文档变量列表,但没有成功。

example_vars = 'NAICS2007_TTL,GEO_TTL,EMP,LFO_TTL,ESTAB,PAYANN'
my_vars = 'NAICS2007,NAICS2007_TTL,GEO_TTL,EMP,LFO_TTL,ESTAB,PAYANN'

county_fips = '027'
state_fips = '42'
key ='str'

url= 'https://api.census.gov/data/2011/cbp?get='+my_vars+'&for=county:'+county_fips+'&in=state:'+state_fips+'&key='+key

res = requests.get(url)
res.status_code

当我添加其他变量时,例如NAICS2007收到状态代码 400,但是当我使用示例变量时,我得到 200。共同点似乎是我的代码。任何人都可以帮忙吗?

CB1100A11 表的图像

标签: pythonpandasapibeautifulsoupcensus

解决方案


这应该移到评论中(我不能评论代表的 bc),但作为与美国人口普查 API 密切合作的人,我强烈建议使用人口普查库:

https://github.com/datamade/census

我的一个查询看起来像这样(其中 acs1dp 是我正在查询的数据库):

    from census import Census 

    conn = Census("MY API KEY")

    name = 'NAME'
    agriculture = 'DP03_0033PE'
    laborForce = 'DP03_0003PE'
    travelTime = 'DP03_0025E'
    highSchool = 'DP02_0066PE' 
    unemployed = 'DP03_0009PE'
    poverty = 'DP03_0128PE'

    payload = conn.acs1dp.get((name, travelTime, agriculture, poverty, 
    unemployed, laborForce, highSchool), {'for': 'state:*'})

它返回所有状态的每个列值。


推荐阅读