Извлечь информацию из 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>
→ Ссылка