使用Python挖掘pixabay JSON响应,但我的最终结果是重复的

时间:2014-01-11 09:39:25

标签: python json api

我正在使用Python从Pixabay API中获取一些JSON。这就是我所拥有的:

import requests
r = requests.get('http://pixabay.com/api/?username=USERNAME&key=APIKEY&search_term=yellow+flower&image_type=photo&per_page=8')
r = r.json()
for i in r:
    for item in r['hits']:
        print item['type']

项目['type']中的结果将返回,而不是URL中请求的8次,但是16次。经过多次检查后,我意识到我的结果在for循环中被复制了。从API返回的json具有正确的结果数,8。在嵌套for循环之前打印第一个for循环的结果,再次显示8个结果。那么我的第二个for循环出了什么问题?

有更好的方法吗?

以下是原始json请求的一部分:

{
    totalHits: 240,
    hits: [
        {
            previewHeight: 99,
            likes: 17,
            tags: "flower, yellow, spehel",
            model_release: false,
            webformatHeight: 423,
            views: 3743,
            webformatWidth: 640,
            previewWidth: 150,
            comments: 5,
            downloads: 3148,
            pageURL: "http://pixabay.com/en/flower-yellow-spehel-144486/",
            previewURL: "http://pixabay.com/static/uploads/photo/2013/07/10/18/13/flower-144486_150.jpg",
            webformatURL: "http://pixabay.com/get/ed740e2b05f6d3677fc8/1389429953/8ecd2717750798bd3f896e9b_640.jpg",
            imageWidth: 4928,
            user: "corinaselberg",
            type: "photo",
            id: 144486,
            imageHeight: 3264
        },
        {
            previewHeight: 84,
            likes: 5,
            tags: "flower, yellow, close",
            model_release: false,
            webformatHeight: 360,
            views: 2286,
            webformatWidth: 640,
            previewWidth: 150,
            comments: 2,
            downloads: 2092,
            pageURL: "http://pixabay.com/en/flower-yellow-close-195893/",
            previewURL: "http://pixabay.com/static/uploads/photo/2013/10/15/09/12/flower-195893_150.jpg",
            webformatURL: "http://pixabay.com/get/e26fb4e50bd3b145d905/1389429953/bf1a2065a9c9d042d1abdc6b_640.jpg",
            imageWidth: 4000,
            user: "Josch13",
            type: "photo",
            id: 195893,
            imageHeight: 2250
        }
    ]
}

我确定我做错了但是经过几个小时的冲击,我想我会在这里询问是否有人能发现我的问题(使用代码)。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您的顶级对象是一个字典,但是您正在循环该对象,这意味着您正在循环键。在该循环内部,您也循环遍历r['hits'],为每个键重复该循环。外部字典有2个键,因此您将重复r['hits']循环两次。

外部循环完全是多余的,将其删除:

r = requests.get('http://pixabay.com/api/?username=USERNAME&key=APIKEY&search_term=yellow+flower&image_type=photo&per_page=8')
r = r.json()
for item in r['hits']:
    print item['type']