Многие частные инвесторы ведут свои портфели в Excel: это удобно, бесплатно и всё — на вашем компьютере. Но у Excel есть слабое место: он не умеет напрямую «разговаривать» с современными сайтами. Если нужно автоматически подтянуть котировку с конкретной страницы в интернете, встроенные веб‑функции часто не справляются: они не умеют обходить современные защиты.

В этой статье я покажу простой и надёжный способ заставить Excel получать котировки практически с любого сайта — на примере курса USD/RUB с investing.com. Идея не требует глубоких технических знаний: вместо того чтобы пытаться что-то делать со страницей в Excel, мы используем на своём компьютере небольшой скрипт‑посредник. Excel просто запрашивает у него одно число, а посредник уже «ходит» на сайт, берёт данные, при необходимости обрабатывает их и возвращает в понятном для Excel виде.
Короткая схема работы:
┌───────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ 1. <a name="cut"></a> Excel (формула)│─ ─ ─>│ 2. Локальный сервер │─ ─ ─>│ 3. Сайт-источник │
│ (простой запрос) │ │ (Excel Data Bridge) │ │ (investing.com) │
└───────────────────┘ └────────┬─────────────┘ └─────────┬────────┘
▲ │ │
│ │ (обрабатывает данные) │ (получает "сырые"
└───────────────────────────┴──────────────────────────────┘ данные)
(возвращает готовый результат)

Приведённый далее Python‑скрипт (набор инструкций для этого «посредника») — это учебный пример: он предназначен исключительно для демонстрации принципа работы с API и веб‑технологиями. Я не призываю и не рекомендую использовать его для обхода правил каких‑либо сайтов.
Все исходные файлы проекта доступны в репозитории на GitHub.
Раньше сайты были простыми — статический HTML, и достаточно было послать GET‑запрос (когда вы вводите адрес сайта в браузере и нажимаете Enter, ваш браузер отправляет GET‑запрос) и прочитать нужный кусок страницы. Сегодня веб — это чаще не страницы, а полноценные приложения: данные подгружаются отдельно через JavaScript, содержимое формируется в браузере и может отсутствовать в исходном HTML. Простая формула Excel этого не видит — она получает «скелет» страницы, а не финальный контент.

Плюс появились надёжные системы защиты: Cloudflare и их аналоги анализируют трафик и блокируют подозрительные запросы. Запрос из Excel выглядит «механически» — без cookie, без поведенческих отпечатков, без выполнения JS — и его часто сразу отбрасывают или ставят на проверку CAPTCHA.
Нам нужен инструмент, который умеет вести себя как настоящий браузер: выполнять JS, держать сессию, ставить нужные заголовки. Именно таким инструментом станет локальный скрипт‑посредник — он «ходит» на сайт как человек/браузер, получает чистые числа и возвращает их Excel в простом виде.
Excel — наш «заказчик». Он делает простой запрос к локальному адресу http://localhost:8000/usd_rub/rate и получает готовое значение. Ему не нужно знать про JavaScript, сессии или CAPTCHA — только чистый текст или XML для ячейки.

Python + FastAPI — «умный посредник». Лёгкий локальный сервер принимает запрос от Excel, применяет стратегию получения данных, обрабатывает ответ и отдаёт результат в удобном формате. FastAPI даёт быстрый и документированный интерфейс.
requests и cloudscraper — наши «вездеходы». requests надёжен для простых запросов; cloudscraper помогает обходить защиту Cloudflare, имитируя поведение браузера. Сначала пробуем простой запрос, при ошибке переключаемся на cloudscraper и возвращаем то, что Excel «съест».
Итог: прозрачный локальный мост, скрывающий сложности веба и возвращающий котировки в Excel.
Теперь переходим к самому интересному — практической реализации. Наша цель — запустить локальный сервер‑посредник и научить Excel обращаться к нему за данными. Следуйте этим шагам, и даже если вы никогда не работали с Python, у вас всё получится.
https://github.com/empenoso/excel-data-bridgeШаг 1: Создание рабочего пространства
Для начала создайте на вашем компьютере отдельную папку, например, excel-data-bridge. В ней мы будем хранить все наши файлы. Это поможет избежать путаницы и обеспечит корректную работу скриптов.
Поместите в эту папку четыре файла, которые были предоставлены ранее:
investing_proxy.py — наш основной скрипт‑посредник.
requirements.txt — список необходимых Python‑библиотек.
1_install_requirements.bat — установщик зависимостей.
2_start_server.bat — запускатор нашего локального сервера.
Шаг 2: Установка необходимых компонентов

Прежде чем наш скрипт сможет работать, ему нужны «помощники» — специальные библиотеки Python. Файл 1_install_requirements.bat сделает всю работу за вас.
Просто дважды кликните по файлу 1_install_requirements.bat. Откроется командная строка, где вы увидите процесс установки. Скрипт сначала проверит, установлен ли у вас Python, а затем скачает и установит все библиотеки из файла requirements.txt. По завершении вы увидите сообщение «Установка завершена!». Это означает, что всё готово к следующему шагу.
Шаг 3: Запуск локального сервера

Теперь, когда все компоненты установлены, запустим наш сервер. Для этого дважды кликните по файлу 2_start_server.bat.
Снова откроется окно командной строки, но на этот раз оно не закроется. Вы увидите сообщения о запуске сервера, а также список доступных адресов (endpoints), по которым Excel сможет обращаться за данными. Пока это окно открыто, ваш сервер работает и готов принимать запросы от Excel. Если вы закроете это окно, сервер остановится.
Шаг 4: Получение данных в Excel

Откройте Microsoft Excel и выберите любую ячейку. Теперь мы используем встроенную функцию ВЕБСЛУЖБА (WEBSERVICE), которая умеет делать запросы по указанному адресу.
Чтобы получить курс USD/RUB, введите в ячейку следующую формулу и нажмите Enter: =ВЕБСЛУЖБА("http://localhost:8000/usd_rub/rate")
Чтобы получить дату и время котировки, введите в соседнюю ячейку: =ВЕБСЛУЖБА("http://localhost:8000/usd_rub/datetime")
Excel отправит запрос на ваш локальный сервер, тот, в свою очередь, сходит на investing.com, получит данные и вернёт их в ячейку.

Это лишь базовый пример, а не готовый универсальный инструмент. Скрипт показывает принцип: Excel делает простой запрос, а посредник достаёт данные с сайта и возвращает результат. Но у каждого инвестора свои задачи: кому‑то нужны котировки акций, кому‑то — нефть или золото, кто‑то захочет загружать таблицы. Именно поэтому код придётся адаптировать под конкретный сайт, формат ответа и даже частоту обновлений. Главное — вы держите в руках рабочий шаблон, который легко модифицировать под себя.
Мы не просто решили локальную задачу получения котировок — мы освоили мощный подход к интеграции Excel с современным вебом. Создав локальный API‑посредник, мы научили старый добрый Excel говорить на языке современных веб‑приложений, обходя их защиты и получая актуальные данные.
Этот мост между Python и Excel открывает широкие возможности для автоматизации рутинных операций и делает ваш инвестиционный портфель по‑настоящему «живым» — с автообновляющимися котировками, курсами валют и любыми финансовыми данными из интернета.
Автор: Михаил Шардин
📢 Telegram «Умный Дом Инвестора»
9 сентября 2025
То, что Михаил пишет, для меня слишком сложно
Не проиллюстрируете на конкретном примере для нас, учащихся лишь в советских школах и никак не знакомых ни с питонами, ни с програмированием?
вместо ABIO ставите тикер своего эмитента. если убрать то выдаст всех акций. tqbr означает цену закрытия ВЧЕРА. убрать SHORTNAME,PREVPRICE выдаст всю информацию, но там много не нужной информации. надеюсь про excel не нужно рассказывать
«Полученная из ИСС информация доступна только для ознакомления, не может быть использована для извлечения прибыли, или иных (кроме ознакомления) действий, в т.ч. для оказания услуг по предоставлению этой информации или подготовленных на её основе материалов и данных, продуктов и сервисов третьим лицам. Любое использование информации (кроме ознакомления) возможно только по договору с ПАО Московская Биржа.
Подробнее на Московской бирже: www.moex.com/a2193»
Но если он будет долго тупить, то вскоре станет не нужным.
Хотя бы для ведения портфеля.
Только зачем тебе 1,000 функций, если используешь не больше 10.
А сколько вас там в банде?
Там можно было настроить три списка: текущий портфель, акции, за которыми присматриваю, и третий список — на выбор.
Настроив текущий портфель, можно было обращаться к нему из Excel.
Потом автор забросил сайт и теперь приходится городить вот такую городулю как в посте.
Я спохватился в понедельник (08.09). Раньше вроде как не замечал. Жалко будет наработанных табличек, если у них что-то поменяется в политике.
Беру Ваш демо с
t-j.ru/media/t-zh_kotirovki-liuboi-bumagi-v-excel.kbveee1m6yil..xlsm
ctrl+alt+f9 и получаю
К тому же есть нюансы. У вас windows? Вы разрешили получение данных для файла через внешние источники?
nekto, настройки безопасности блокируют у Вас. Разбирайтесь.
В оригинальном файле до сих пор работает:

Windows 7, Excel 2016. Всё старое, ничего не менялось и работало очень давно (кроме установки Касперского). Что могло произойти,- не понимаю.
В безопасности стояло «запрос на подключение данных». Но даже «включить все подключения к данным» ничего не меняет.
Попробую на другом компе.
Но вы например можете просто скопировать вручную формулы в новый файл созданный на вашем компьютере
Вчера перенёс табличку с Вашим демо (старый правда, но нового у меня нет) на другой ноутбук. Результат тот же.
На безопасность из интернета может влиять Касперский. Но просто остановка защиты ничего не меняет.
Остаётся переустановка Excel и полное удаление Касперского.
встает нереальное значение. Спасибо.
Очень интересно.
Поставил себе Ваш тестовый пример. Всё заработало.
Я теперь счастливый обладатель актуального курса USD с сайта www.investing.com/currencies/usd-rub.
Захотел перенести этот опыт на другой сайт, например отслеживать котировку ПИФа:
investfunds.ru/funds/113/.
Сразу обнаружился у меня пробел.
Курс на сайте www.investing.com/currencies/usd-rub я вижу. Этот url есть.
А вот как от него перейти к заданию в investing_proxy.py
url = «api.investing.com/api/financialdata/2186/historical/chart/»
не пояснено. Хотя задача далеко не тривиальная.
Не подскажите, как надо действовать?
Спасибо.
YaroslavN, самое удивительное что у investfunds.ru тоже есть скрытое АПИ. Может быть даже отдельный прокси сервер и не потребуется.
Это на отдельный мануал тянет. Но к сожалению такого не выйдет — публично про такое писать — не хочу получить юридические претензии...
А вот их разбор:

Теперь попробую из неё получить желаемое.
Михаил, большое спасибо.
Предыстория вопроса.
Я — физик. Время от времени закачиваю к себе прямо из Excel данные о ПИФах с сайта investfunds.ru/.
Начиная примерно с сентября первый запрос из «Query & Connections» не проходил, получал на каждый запрос: (503): Service TemporariIy UnavaiIable.
Нажимал «Refresh All» повторно, тогда данные в Excel закачивались.
С 14.09.2025 уже никакие запросы из Excel не проходят.
Пробовал вводить свои учётные данные для их сайта.
Всё равно не проходит, всё равно получаю (503): Service TemporariIy UnavaiIable.
Обратился в Поддержку Investfunds.
Описал ситуацию.
Ярослав, добрый день! Дело не в учетной записи, а в настройках браузера (сайт действительно стал более защищенным, в том числе от парсинга).
Рекомендуем вам пользоваться возможностью скачивать данные в xls-формате.
Вопрос: возможно ли по-прежнему физику периодически закачивать данные с Вашего сайта к себе прямо в Excel файл? (Не пользуясь платными подписками).
— Администратор Investfunds
Ярослав, точно можно, мы не ограничивали/не закрывали доступ к сайту, все данные по-прежнему открытые и бесплатные.
Пока не получилось воспроизвести Вашу ошибку, за исключением случая, когда доступ происходит с зарубежного адреса и зарубежный провайдер блокирует сайт.
Доступ из России, из Петербурга. ВПН на компе не запущен.
Администратор Investfunds
мы не можем разбираться в тонкостях настройки получения данных непосредственно с помощью Excel, можем только Вас заверить, что данные никаким образом мы не закрывали и проблему, описанную Вами,
воспроизвести не можем