首页 > 解决方案 > 如何使用请求的特定响应/输出在 python 中循环和填充嵌套的 dict/json

问题描述

我正在爬取一个站点并从一些 ajax 下拉列表中获取数据,并且数据是相关的。所以基本上,为了简单起见,假设我抓取了第一个下拉列表,它给了我名称和值,我使用这些值运行一个循环并为下一个下拉列表获取它的名称、值等。假设数据是对于国家,然后是地区,然后是地区等。所以我可以获得名称,值;现在我想加入每个国家填充其相关区域,区域填充其相关区域。

示例代码:

import requests
from bs4 import BeautifulSoup

URL = "https://somesite.com/"

COUNTRIES = {
    "NAME": 1,
    "ANOTHER": 2
}

REGIONS = {}
DISTRICTS = {}

def fetch(s, url, value, store):
    data = {
        'id': str(value)
    }
    res = s.post(url, data=data)
    soup = BeautifulSoup(res.content, 'html5lib')
    options = soup.find_all('option')[1:]
    for option in options:
        name = option.text
        value = option.get('value')
        #value = option.attrs['value']
        store[name] = value

for name, val in COUNTRIES.items():
    fetch(requests, URL+"getregions", val, REGION)

for name, val in REGIONS.items():
    fetch(requests, URL+"getdistricts", val, DISTRICTS)

我想最终将所有这些结合起来,形成一个嵌套的 json/dict 形式:

DATA = {
    "COUNTRY1": {
        "REGION1": {
            "DISTRICT1": { "WARDS": ..... },
            "DISTRICT2": { "WARDS": ..... },
        },
        "REGION2": {
            "DISTRICT1": { "WARDS": ..... },
            "DISTRICT2": { "WARDS": ..... },
        },
    },
    "COUNTRY2": {
        "REGION1": {
            "DISTRICT1": { "WARDS": ..... },
            "DISTRICT2": { "WARDS": ..... },
        },
        "REGION2": {
            "DISTRICT1": { "WARDS": ..... },
            "DISTRICT2": { "WARDS": ..... },
        },
    },
}

如果可能,也可以采用这种形式:

[{
    country: "NAME",
    region: "RNAME",
    district: "DNAME",
    ward: "WNAME"
},
{
    country: "NAME",
    region: "RNAME",
    district: "DNAME",
    ward: "WNAME"
},

对于 SQL 和 NoSQL。

我想过闭包之类的,但我似乎无法找到实现它的逻辑。任何可以提供帮助的人都会非常感激,请在 Python 中提供首选答案。

我是在这里提问的新手,我花了一段时间来撰写这个问题,如果它不简洁,我深表歉意,如果你还没有理解,请询问我可以解释更多。

标签: pythonloopsdictionarynestedpython-requests

解决方案


推荐阅读