如何完整地获取父项和子项,Python 3.6

如何完整地获取父项和子项,Python 3.6,python,pandas,beautifulsoup,Python,Pandas,Beautifulsoup,下面的代码工作效率很高,但for循环中很少有部分无法获取正确的 信息。谁能帮帮我吗。我想获取提供者列表中存在的所有数据集。反过来我无法在csv文件中获取主数据集标题 import requests, os, sys, csv import pandas as pd list from bs4 import BeautifulSoup pd.set_option('display.max_colwidth', 10000) pd.set_option('display.expand_frame_

下面的代码工作效率很高,但for循环中很少有部分无法获取正确的 信息。谁能帮帮我吗。我想获取提供者列表中存在的所有数据集。反过来我无法在csv文件中获取主数据集标题

import requests, os, sys, csv
import pandas as pd list
from bs4 import BeautifulSoup

pd.set_option('display.max_colwidth', 10000)
pd.set_option('display.expand_frame_repr', False)
以下是提供有关提供商信息的链接

URL_1 = 'https://db.nomics.world/providers'
URL_2 = 'https://db.nomics.world/'

Required_Columns = ['Provider', 'Region', 'Website', 'In DBnomics since', 'Updated by DBnomics on', 'Dataset Name', 'Link']

print('\n> Retrieve DBNomics Providers')

DBN_Providers = []

Response = requests.get(URL_1)
Soup = BeautifulSoup(Response.content, 'html.parser')
for Class_L1 in Soup.findAll('div', {'class': 'my-8 sm:flex sm:flex-wrap sm:-mx-4'}):
    for Class_L2 in Class_L1.findAll('h2', {'class' : 'mb-2 font-bold text-grey-darkest text-xl group-hover:underline'}):
Provide_Code = Class_L2.text
Provide_Code = Provide_Code.strip()
DBN_Providers.append(Provide_Code)
print('\n>> Total Providers:', len(DBN_Providers))
Details_All = pd.DataFrame()
for I, Provider in enumerate(DBN_Providers, start=1):
URL = URL_2 + Provide
print('%s > %s : %s'%(I, Provider, URL))
Meta_Data = {}
Meta_Data['Provider'] = Provider
Response = requests.get(URL)
Soup = BeautifulSoup(Response.content, 'html.parser')
# Meta Data
for Class_L1 in Soup.findAll('dl', {'class': 'dl-properties'}):
TList = []
for Item in Class_L1.findAll('dd'):
Item = Item.text
Item = Item.strip()
TList.append(Item)
Meta_Data['Region']  = TList[0]
Meta_Data['Website']  = TList[1]
Meta_Data['In DBnomics since']  = TList[2]
Meta_Data['Updated by DBnomics on'] = TList[3]
Meta_Data = pd.DataFrame([Meta_Data])
# Dataset Details
Dataset_List = []
for Class_L1 in Soup.findAll('div', {'id': 'category-tree'}):
for Class_L2 in Class_L1.findAll('ul', {'class': 'list-reset mb-6'}):
for Class_L3 in Class_L2.findAll('details', {'class': 'my-4'}):
for Class_L4 in Class_L3.findAll('a', {'class': 'mr-1'}):
TList = []
Dataset_Name = Class_L4.text
Dataset_Name = Dataset_Name.strip()
TList.append(Dataset_Name)
HREF = Class_L4.get('href')
TList.append(URL_2 + HREF.strip())
Dataset_List.append(TList)
Dataset_DF = pd.DataFrame(Dataset_List, columns=['Dataset Name', 'Link'])
DF = pd.concat([Meta_Data, Dataset_DF], sort=False)
DF = DF.sort_values(['Provider'], ascending=[True])
DF = DF.fillna(method='ffill')
DF = DF.dropna(subset=['Dataset Name'])
Details_All = Details_All.append(DF, sort=False)

Details_All = Details_All.drop_duplicates()
Details_All = Details_All[Required_Columns]
Details_All.to_csv('Details_All.csv', index = False, encoding='utf-8-sig')

使用
API
并刮取您需要的任何东西:

import requests
import csv

r = requests.get('https://api.db.nomics.world/v22/providers/').json()

data = []
for item in r['providers']['docs']:
    item = (item['code'], item['region'],
            item['website'], item['converted_at'][0:10], item['name'], f"https://db.nomics.world/{item['code']}")
    data.append(item)


with open('output.csv', 'w+', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Name', 'Region', 'Website',
                     'Updated by DBnomics on', 'Dataset Name', 'Link'])
    writer.writerows(data)
    print("Operation Completed")

联机查看输出:

您还可以按以下提供程序名称循环数据:

比如:

import requests

r = requests.get('https://api.db.nomics.world/v22/providers/AMECO').json()

for item in r['category_tree'][0:]:
    pop = [oka['name'] for oka in item['children'][0:]]
    print(pop)
输出:

[‘人口’、‘劳动力统计’、‘失业’、‘就业’、‘个人(国民账户)’、‘就业、全职同等人员(国民账户)’、‘自营职业者、个人(国民账户)’、‘工资和薪金收入者、全职同等人员(国民账户)’]
[‘私人最终消费支出’、‘人均私人最终消费支出’、‘家庭实际个人最终消费’、‘消费物价指数’、‘总政府最终消费支出总额’、‘总政府集体消费支出’、‘总政府个人消费支出’l政府“,”总消费“]
[‘固定资本形成总额,总经济和部门’、‘固定资本形成总额,按现行价格计算,部门’、‘固定资本形成净额,总经济’、‘固定资本形成净额,按现行价格计算,部门’、‘固定资本消耗,总经济’、‘固定资本消耗,一般政府’、‘固定资本总额表’按当前价格的商品类型划分的固定资本形成总额、按固定价格的商品类型划分的固定资本形成总额、按商品类型划分的固定资本形成总额、价格平减指数、存货变动和贵重物品净收购额、资本形成总额、储蓄总额、储蓄净额]
[‘不包括存货变动的国内需求’、‘包括存货变动的国内需求’、‘最终需求’、‘对最终需求平减指数变动的贡献’]
[“国民总收入”、“人均国民总收入”、“国民净收入”、“按现行价格计算的国民可支配收入”、“人均国民可支配总收入”]
[‘国内生产总值’、‘人均国内生产总值’、‘就业人均国内生产总值’、‘每工作小时国内生产总值’、‘以不变价格计算的潜在国内生产总值’、‘以不变价格计算的趋势国内生产总值’、‘以不变价格计算并根据人均贸易条件的影响进行调整的国内生产总值’、‘C以不变市场价格计算的国内生产总值变化的贡献“,”以现行价格计算的国内生产总值的替代定义“,”总增加值,总经济“]
[‘员工薪酬’、‘与进口、生产和补贴相关的税收,总经济’、‘经营盈余,总经济’、‘每位员工名义薪酬,总经济’、‘每位员工实际薪酬,总经济’、‘调整工资份额’、‘名义单位劳动力成本,总经济’、‘实际单位劳动力成本,总经济’]
[‘固定价格净资本存量,总经济’、‘要素生产率,总经济’、‘生产要素替代,总经济’、‘资本边际效率,总经济’]
[“商品和服务出口”、“商品和服务进口”、“商品出口”、“服务出口”、“商品进口”、“服务进口”、“贸易条件”]
[“与世界其他地区的余额,国民账户”,“与世界其他地区的余额,国际收支统计”]
[“按现行价格计算的对外贸易”,“世界贸易中的对外贸易份额”]
[‘就业,人员’,‘就业,全职等价物’,‘工薪阶层,人员’,‘工薪阶层,全职等价物’,‘主要分支机构按当时价格计算的总增加值’,‘主要分支机构按当时价格计算的就业人均总增加值’,‘主要分支机构按当时价格计算的每位员工的总增加值’,‘总增加值’主要分支机构以不变价格计算的增加值”、“主要分支机构以不变价格计算的人均就业总价值”、“主要分支机构以不变价格计算的人均就业总价值”、“价格平减指数主要分支机构增加的总价值”、“主要分支机构的员工薪酬”、“主要分支机构的人均名义薪酬”、“调整后的w“按主要部门划分的年龄比例”、“按主要部门划分的名义单位工资成本”、“按主要部门划分的名义单位劳动力成本”、“按主要部门划分的实际单位劳动力成本”、“工业生产”]
[“汇率和购买力平价”、“利率”]
[“收入”、“支出”、“余额”]
[“收入”、“支出”、“余额”]
[‘收入(2010年欧洲账户体系)’,‘支出(2010年欧洲账户体系)’,‘净贷款(2010年欧洲账户体系)’,‘过度赤字程序’]
[“基于潜在GDP(ESA 2010)”,“基于趋势GDP(ESA 2010)”]
[“基于ESA 2010”,“基于ESA 2010和以前的定义(链接系列)”]

使用
API
让你的生活更轻松谢谢你。但是,我可以一次获取全部和唯一的提供商列表吗?由于您与一家提供商“AMECO”合作,因此有62家提供商。那么,有可能吗?您可能无法一次获得所有线程,但如果您使用线程,您可以大大增加每次获得的线程数,从而大大加快进程@manasakulkarni@maestro.inc你能帮帮我吗。