python - 如何使用请求的特定响应/输出在 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 中提供首选答案。
我是在这里提问的新手,我花了一段时间来撰写这个问题,如果它不简洁,我深表歉意,如果你还没有理解,请询问我可以解释更多。
解决方案
推荐阅读
- angularjs - 如何在 AngularJS 中使用嵌套循环
- excel - 使用 Union 将多个范围复制到 Word 文档,范围之间没有空白单元格
- blueprism - BluePrism.BPCoreLib.InvalidValueException:未定义服务器配置“默认”
- powerapps - Power app 数据表迭代。
- ios - 如何使用 RxSwift 强制点击 UIButton?
- sql-server - 按行求和,而不是整个查询
- angularjs - AngularJS Jasmine 测试 - 从 callFake 函数返回被拒绝的承诺
- linux - 在 Bash 中使用“期望”并以任何顺序响应
- c# - 如何使用不同的 URL 导航当前的 google chrome 或 firefox 或 edge 选项卡
- javascript - 根据滚动位置来回动画