Python请求Web数据

时间:2017-06-20 23:19:18

标签: python json

大家好我有以下代码正常工作

import requests

import json

f= open
r=requests.get('https://greatbritishpublictoiletmap.rca.ac.uk/loos/54c234f02ec4abe957b84f37?format=json')

data = r.json()

with open('data.json', 'w') as f:

json.dump(data, f)

但我希望将厕所ID作为网址的一部分,在它之上是动态的54c234f02ec4abe957b84f37?它必须从json列表中读取,我可以通过此代码加载列表 -

import json

with open('loos.json') as json_data:


d = json.load(json_data)

但我无法弄清楚如何从loos数据集中读取'id',将每个json结果附加到json转储,因为它遍历'loos'数据集

我觉得我已经接近完成这项任务,但只需要一个小费或2

非常感谢。

附加更新

`import json
import requests

with open('Tloos.json') as json_data:

data = json.load(json_data)

for i, loo in enumerate(data['features']):
    loo_id = loo['_id']
    r=requests.get('https://greatbritishpublictoiletmap.rca.ac.uk/loos/{}?format=json'.format(loo_id))

data = r.json()
with open('data%d.json' %i, 'w') as f:
    json.dump(data, f)`

所以,这是我的尝试,但它只保存输出的json文件中的最后一个loo id,我猜它会覆盖其他文件(我的测试Tloos.json文件总共有3个厕所)或者没有正确迭代?我该如何调试呢?

1 个答案:

答案 0 :(得分:1)

使用字符串format函数可以非常轻松地完成您指定的内容。

import requests
import json

with open('loos.json') as json_data:
    loo_id = json.load(json_data)['id']

r=requests.get('https://greatbritishpublictoiletmap.rca.ac.uk/loos/{}?format=json'.format(loo_id))

data = r.json()
with open('data.json', 'w') as f:
    json.dump(data, f)

这将为您提供如何做到这一点的要点。我肯定不知道你的loos.json结构,因此你需要调整它以获得loo_id。其余的保持不变。

如果你想迭代许多loo_ids,你必须用循环来做这样的事情:

for i, loo in enumerate(loo_structure['features']):
    loo_id = loo['_id']
    r=requests.get('https://greatbritishpublictoiletmap.rca.ac.uk/loos/{}?format=json'.format(loo_id))

    data = r.json()
    with open('data%d.json' %i, 'w') as f:
        json.dump(data, f)

其中loo_ids是包含您的ID的迭代。