Как l oop и заполнить вложенный dict / json в python, используя спецификацию запросов c ответ / вывод - PullRequest
2 голосов
/ 18 февраля 2020

Я сканирую сайт и получаю данные из некоторых ajax выпадающих меню, и эти данные связаны между собой. Итак, для простоты, скажем, я сканирую 1-й выпадающий список, и он дает мне имя и значение, и я использую значения для запуска al oop и для следующего выпадающего списка и получаю его имя, значение и т. Д. c. Скажем, данные даны для стран, затем регионов, районов и т. Д. c. Так что я могу получить имя, значения; Теперь я хочу присоединиться к каждой стране, которая будет заполнена соответствующими регионами, а регионы заполнены соответствующими районами.

Пример кода:

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 и Нет SQL.

Я думал о замыканиях и тому подобном, но я просто не могу найти логи c для его реализации. Любой, кто может помочь, будет очень благодарен, предпочтительный ответ в Python, пожалуйста.

Я новичок в задании вопросов здесь, и мне потребовалось некоторое время, чтобы составить этот вопрос, я прошу прощения, если он не является кратким и пожалуйста, спросите, если вы не поняли, чтобы я мог объяснить больше.

...