Извлечь информацию из xml в соответствии с введёнными данными
Есть xml:
<cars>
<car>
<renttarifes>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="0" till="7">2100</tarif>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="7" till="14">1950</tarif>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="14" till="30">1800</tarif>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="30" till="100">1700</tarif>
</renttarifes>
</car>
</cars>
Если пользователь вводит, например, 15, то как мне извлечь тариф? Цифры получаю так:
root = BeautifulSoup(response_text, 'html.parser')
def get_tarif(car) -> str:
tarif = car.find_all('tarif')
return tarif
for car in root.select('car'):
tarif = get_tarif(car)
tarif_a = str(tarif)
tarif_b = re.sub(r'\<.*?\>', '', tarif_a)
Здесь я получаю только стоимость, а вот как извлечь тариф в соответствии с введённым количеством дней?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
from bs4 import BeautifulSoup
html = '''
<cars>
<car>
<renttarifes>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="0" till="7">2100</tarif>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="7" till="14">1950</tarif>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="14" till="30">1800</tarif>
<tarif uid="485916e2-f66e-11ea-aa7e-000c29a3594b" bounty="100" dim="сутки" from="30" till="100">1700</tarif>
</renttarifes>
</car>
</cars>
'''
root = BeautifulSoup(html, 'html.parser')
days = 15
for tarif in root.select('tarif'):
start = int(tarif['from'])
end = int(tarif['till'])
if days in range(start, end + 1):
print(tarif.text)
print(tarif)
break
# 1800
# <tarif bounty="100" dim="сутки" from="14" till="30" uid="485916e2-f66e-11ea-aa7e-000c29a3594b">1800</tarif>