0

嘿,我是 python 编程的新手。我有一个从 bing 搜索中获取 url 的程序。它应该在最后两行代码中打印 url。然而它给出了上面提到的错误。

import requests
URL = "https://mykey:mykey@api.datamarket.azure.com/Bing/Search/Web?$format=json&Query=%(query)s"
API_KEY = 'mykey'

def request(query, **params):
    query = ('%27'+query+ '%27')
    r = requests.get(URL % {'query': query}, auth=('', API_KEY))
    print r.content
    return [res['Url'] for res in r.json()['d']['results']]


r = request("Jason Bourne")

for res in r['d']['results']:
        print res['Url']

错误是倒数第二行我该如何修复代码?

这是回溯

for res in r['d']['results']:
TypeError: list indices must be integers, not str
4

2 回答 2

1

在您的request方法中,您已经使用该理解将 json 字典解压缩到列表中。所以r看起来像['some url', 'some other url', 'some third url']

当您尝试以与 unpacked 相同的方式解压列表时,r.json()会引发异常,因为这没有任何意义。您可以使用以下方式访问列表成员

for url in a:
    print url

或者只是print a如果您不关心格式。

如果您希望调用者可以访问整个字典,则可以选择仅从return r.json()您的方法中。request

于 2013-08-12T16:19:35.157 回答
0

仅供参考,此 Python 函数将以 dict 格式返回从 URL 获取的 json 文档

import json
import requests

def query_site(url, params):    # Psuedo code def()... Depends on the site's API

    r = requests.get(url, params=params)   # Psuedo code... Depends on the site's API

    if r.status_code == requests.codes.ok:
        return r.json()     # Per Roippi, this bit of code returns a type that Python can use as 'dict'
    else:
        r.raise_for_status()

调用此函数后执行 a type(r),您将获得“dict”。

于 2017-08-29T16:21:33.447 回答