我用API抓取了一个网页,想访问结果的一部分,但访问起来有困难:
import requests
import json
headers = {'x-api-key': 'my_key'}
test_url= "https://api.propublica.org/congress/v1/statements/date/2018-05-
22.json"
resp = requests.get(test_url, headers=headers).json()
结果以字典格式显示,如下所示:
^{pr2}$我想从每个条目中提取'url'值,但是条目似乎没有一个可以向下钻取的键。我怎样才能访问这些文件?我以为:
resp["url]
会有用的,但我一点运气都没有。我理想的输出应该是:
[url1, url2]
你所拥有的是一份口述清单。所以你必须先得到列表中的元素,然后才能把它们当作dicts来对待。在
例如,第一个URL是
results[0]['url']
。或者,如果你想对每个URL都做些什么,你必须做'forresult-in-results:dosomething(result['URL'])`。在那么,如果你想得到所有网址的列表呢?在
当然,如果您理解列表的含义,则可以使其更紧凑:
^{pr2}$如果你要在这个结构上做很多复杂的查找,有两个选项可以考虑。在
首先,可以将数据重新构造为更易于使用的形式。例如,如果您需要做很多事情,比如查找来自北达科他州的参议员,那么最好写}。您可以使用:
senate['ND']
,而不是{显然,这很复杂,而且只有在其他地方节省更多的复杂性时才有用。在
还有(至少)三种不同的迷你语言可以搜索嵌套的list和dict结构,键路径作为字符串,使用通配符jsonpath、dpath和kvc,它们都有PyPI上的库,您可以查找它们。它们都有一个学习曲线,如果你只是在数据上做一个简单的搜索,那么它们就有点过头了。但是如果你要做大量的搜索,你可以把每一个都写成}这一事实有时会有回报。在
urls = search(results, '*.url')
而不是{您需要从
resp
列表中依次提取每个URL。简单的列表理解可以:能够在以下情况下使用:
相关问题 更多 >
编程相关推荐