API и машиночитаемые сервисы Банка России
Зачем и для кого
Инструкция для аналитиков и разработчиков, которым нужны официальные курсы валют и ряды статистики Банка России без ручного копирования с HTML-страниц. ЦБ не ведёт исполнение бюджета по КБК: данные здесь дополняют анализ макроокружением (ставка, ликвидность, внешний сектор, курсы).
Входные данные
- Дата для ежедневного списка курсов — параметр
date_reqв форматеДД/ММ/ГГГГ(например11/05/2026для 11 мая 2026 г.). В выходные и праздники сервис может вернуть ближайший торговый день — сверяйте атрибутDateв корне XML. - Коды валют — трёхбуквенный
CharCode(напримерUSD,EUR) и внутреннийIDвалюты в XML; для статистики — идентификаторы показателей из базы данных показателей и документации сервиса получения данных. - Зафиксируйте дату выгрузки и URL в ноутбуке или пайплайне — состав показателей и иногда адреса разделов меняются.
Инструменты
- Браузер — для чтения документации на
cbr.ruи ручной проверки таблиц. - Python 3 с пакетом
requests(илиhttpx) и стандартной библиотекойxml.etree.ElementTreeдля разбора курсов. - Для объёмных рядов статистики — по документации сервиса: REST/SOAP-клиент или экспорт из
hd_base(CSV/XLSX/XML), если API избыточен.
Шаги
- Определите тип данных: только курсы официального списка на дату, один показатель из статистики через API, или массовая выгрузка из базы показателей / файлов раздела Статистика.
- Выберите канонический URL на домене
cbr.ru/www.cbr.ru(см. карточку источника); не подменяйте первоисточник сторонними зеркалами курсов, если важна ссылка на официальную публикацию. - Выполните запрос с разумным
timeout(например 30 с), при необходимости — с повтором при временных сбоях сети. - Декодируйте ответ: для классического XML курсов задайте кодировку
windows-1251(см. объявление в начале файла). - Закешируйте ответы на стороне клиента (курсы на дату меняются не чаще одного раза в день по смыслу публикации; статистика — по календарю выхода ряда).
Воспроизводимый пример
Официальный ежедневный файл курсов (XML) за указанную дату и разбор пары полей:
import requests
import xml.etree.ElementTree as ET
from datetime import date
date_req = date.today().strftime("%d/%m/%Y")
url = "https://www.cbr.ru/scripts/XML_daily.asp"
response = requests.get(url, params={"date_req": date_req}, timeout=30)
response.raise_for_status()
response.encoding = "windows-1251"
root = ET.fromstring(response.text)
print("Дата набора в XML:", root.attrib.get("Date"))
for valute in root.findall("Valute"):
code = valute.findtext("CharCode")
if code in ("USD", "EUR"):
nominal = valute.findtext("Nominal")
value = valute.findtext("Value")
print(f"{code}: {value} руб. за {nominal} ед.")
Для статистических рядов параметры запросов и форматы ответа берите из страницы сервиса получения данных и сопутствующих PDF на сайте ЦБ — перечень показателей и протокол обновляются независимо от этого howto.
Проверка результата
- Сверьте
Dateв XML с ожидаемой календарной датой: при несовпадении учтите нерабочий день на рынке иностранной валюты. - Для выборочной проверки откройте на сайте ЦБ раздел курсов и сравните значение и номинал для той же валюты и даты.
- Для статистики — сопоставьте последнюю точку ряда с таблицей или файлом в разделе статистики для того же показателя и даты публикации.
Ограничения и типовые ошибки
- Кодировка: ответ
XML_daily.aspвwindows-1251; при «кракозябрах» проверьтеresponse.encoding, а не только UTF-8 по умолчанию. - Нет торгов — другая дата в файле: не трактуйте
date_reqкак гарантию даты курса без чтения атрибутаDate. - Лимиты и условия использования сервисов ЦБ — в официальной документации на портале; избегайте агрессивного опроса без кеша.
- Путь
https://cbr.ru/opendata/не является стабильной витриной (по проверкам в корпусе даёт 404); опирайтесь на разделы статистики,hd_baseиdata-service— см. сайт Банка России.
Связанные страницы
- Статистика Банка России — сводка точек входа, форматов и оговорок по данным.
- Сайт Банка России — подсистемы портала, ограничения по URL и API.
- Банк России — оператор и роль в публикации данных.