Метод .find() в библиотеке bs4

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2023

Мне дан API ЦБ РФ (https://cbr.ru/scripts/XML_daily.asp?date_req=10.04.2023).

И мне нужно используя метод .find модуля BeautifulSoap4, зная лишь CharCode валюты, спарсить ее Value.

Я пытался делать это самостоятельно, но мой код выдает ответ None.

Код:

import requests
from bs4 import BeautifulSoup
from datetime import datetime

url = 'https://cbr.ru/scripts/XML_daily.asp?'

today = datetime.today()
today = today.strftime('%d/%m/%Y')

date = 'date_req'+today
response = requests.get(url+date)

payload = {
    'date_req': today
}

response = requests.get(url, params=payload)

xml = BeautifulSoup(response.content, 'lxml')

def course(valute_from, valute_to, amount):
    a = xml.find('valute', {'CharCode':valute_from })
    print(a)

# valute_from = input('Введите код валюты, которую нужно конверитровать: ')
# valute_to = input('Введите код валюты, в которую вы будете конвертировать: ')
# amount = float(input('Введите сумму денег, которую необходимо конвертировать: '))

course('USD', 'EUR', 1)

Как можно исправить код?

Ответы

▲ 1Принят
import requests
from bs4 import BeautifulSoup
from datetime import datetime

today = datetime.today()
today = today.strftime('%d.%m.%Y')

response = requests.get(f'https://cbr.ru/scripts/XML_daily.asp?date_req={today}')
xml = BeautifulSoup(response.content, 'xml')

def course(valute_from):
    # return xml.find(string=valute_from).parent.parent.Value.text
    return xml.find(string=valute_from).find_next('Value').text

a = course('USD')
print(a)
# 82,3988

a = course('Таиландских батов')
print(a)
# 24,1807