如何使用请求的特定响应/输出在python中循环和填充嵌套的dict/json

2024-10-05 14:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在抓取一个站点,从一些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给出最好的答案

我是新来这里问问题的,我花了一段时间来写这个问题,我很抱歉,如果它不简洁,请询问您是否理解,以便我可以解释更多


Tags: name名称url列表datavaluevalfetch