Как сделать парсинг в Excel: от простых формул до автоматизации

Если вам нужно перенести таблицы с сайта в Excel без ручного копирования, или регулярно обновлять цены/каталоги из веб-источников, стандартные функции программы не помогут — требуется парсинг данных. На практике это означает, что Excel будет автоматически извлекать информацию из HTML-кода страниц, API или файлов, преобразовывать её в структурированный вид и обновлять при необходимости. Например, вы можете ежедневно получать курсы валют с сайта ЦБ, акции конкурентов с маркетплейсов или статистику с корпоративных порталов — без единого клика после настройки.

В этой статье разберём рабочие методы парсинга в Excel — от элементарных (формулы =WEBSERVICE() и =FILTERXML()) до продвинутых (скрипты на Python + Power Query). Все способы протестированы на Excel 2019–2026 и Microsoft 365, с учётом ограничений бесплатных версий. Особое внимание уделим типичным ошибкам: почему парсинг возвращает #VALUE!, как обойти блокировку сайтов и что делать, если данные приходят в некорректной кодировке.

1. Парсинг через формулы Excel: WEBSERVICE + FILTERXML

Самый быстрый способ получить данные с веб-страницы — использовать комбинацию двух функций: =WEBSERVICE(url) (загружает HTML-код) и =FILTERXML(данные; xpath) (извлекает фрагменты по XPath-запросу). Этот метод работает в Excel 2013 и новее, но имеет ограничение: не все сайты разрешают такие запросы (может вернуть ошибку #N/A).

Пример: нужно спарсить курс доллара с сайта ЦБ РФ. Сначала найдём XPath к нужному элементу (используйте расширение XPath Helper для Chrome). Допустим, XPath для курса — //*[@id="currency_table"]/tr[1]/td[2]. Тогда формулы будут:

=WEBSERVICE("https://www.cbr.ru/currency_base/daily/")

=FILTERXML(A1; "//*[@id='currency_table']/tr[1]/td[2]")

  • Плюсы: не требует установки дополнений, обновляется при пересчёте листа.
  • Минусы: ломается при изменении структуры сайта, не подходит для динамических страниц (где контент подгружается JS).
  • ⚠️ Ограничение: WEBSERVICE работает только в Excel для WindowsMac и онлайн-версии — нет).
⚠️ Внимание: Если формула возвращает #VALUE!, проверьте:
  1. Корректность XPath (сайты часто меняют структуру).
  2. Наличие https:// в URL (без протокола не работает).
  3. Отключены ли блокировщики рекламы — они могут мешать загрузке данных.

2. Power Query: парсинг с трансформацией данных

Power Query (вкладка Данные → Получить данные) — встроенный инструмент Excel для импорта и преобразования данных. Он поддерживает парсинг из веб-источников, JSON, XML и даже баз данных. Главное преимущество перед формулами — возможность очистки данных "на лету": удаление лишних столбцов, замена текста, объединение таблиц.

Алгоритм парсинга через Power Query:

  1. Перейдите на вкладку Данные → Получить данные → Из других источников → Из веб.
  2. Вставьте URL страницы (например, https://example.com/prices).
  3. В открывшемся окне выберите таблицу (если сайт их поддерживает) или нажмите Дополнительно для ручного XPath.
  4. Настройте трансформации (например, удалите пустые строки командой Таблица → Удалить строки → Пустые строки).
  5. Нажмите Закрыть и загрузить — данные появятся на новом листе.

Тип данныхИсточникПример URLПоддерживается ли обновление
HTML-таблицыСайты с статичным контентомhttps://finance.yahoo.com/quote/AAPLДа
JSON/APIОткрытые API (например, погода)https://api.openweathermap.org/data/2.5/weather?q=MoscowДа
XMLНовостные ленты, каталогиhttps://news.yandex.ru/index.rssДа
CSV/TXTЭкспорт данных с сайтовhttps://example.com/export.csvДа

Для динамических сайтов (где данные подгружаются после загрузки страницы) Power Query не подходит — он парсит только исходный HTML. В таких случаях нужен VBA или внешние инструменты вроде ParseHub.

📊 Какой инструмент вы используете для парсинга в Excel?
Только формулы
Power Query
VBA-скрипты
Внешние сервисы (ParseHub, Octoparse)
Не парсю данные

3. VBA-скрипты: парсинг с полным контролем

Если нужно спарсить данные со сложной структурой или обойти защиту сайта (например, облачные фаерволы), напишите макрос на VBA. Этот метод требует базовых знаний программирования, но даёт максимальную гибкость: можно эмулировать действия пользователя (клики, скроллинг), работать с куками и даже обходить простейшие CAPTCHA.

Пример скрипта для парсинга заголовков новостей с сайта:

Sub ParseNews()

Dim http As Object, html As Object, url As String

Dim headlines As Object, i As Integer

url = "https://news.yandex.ru/"

Set http = CreateObject("MSXML2.XMLHTTP")

Set html = CreateObject("HTMLFile")

http.Open "GET", url, False

http.send

html.body.innerHTML = http.responseText

Set headlines = html.getElementsByClassName("story__title") ' класс заголовков

For i = 0 To headlines.Length - 1

Cells(i + 1, 1).Value = headlines(i).innerText

Next i

End Sub

  • 🔧 Настройка: Чтобы скрипт работал, включите Сервис → Макрос → Безопасность → Разрешить все макросы (временное решение для тестов!).
  • 🛡️ Безопасность: Не запускайте макросы из ненадёжных источников — они могут содержать вредоносный код.
  • Ускорение: Для парсинга сотен страниц используйте Application.ScreenUpdating = False в начале скрипта.
⚠️ Внимание: Многие сайты блокируют запросы без заголовка User-Agent. Добавьте в скрипт строку:
http.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
Как обойти блокировку по IP при парсинге?

Если сайт блокирует ваш IP после нескольких запросов, используйте прокси-серверы. В VBA это реализуется через настройку WinHttp.WinHttpRequest.5.1 с параметром .SetProxy. Например:

Set http = CreateObject("WinHttp.WinHttpRequest.5.1")

http.SetProxy 2, "proxy.example.com:8080" ' 2 — тип прокси (HTTP)

Важно: Бесплатные прокси часто медленные и ненадёжные. Для серьёзных задач используйте платные сервисы (например, Luminati или Smartproxy).

4. Парсинг через внешние сервисы (ParseHub, Octoparse)

Если не хотите разбираться в VBA или Power Query, воспользуйтесь специализированными сервисами:

  • ParseHub — подходит для новичков, поддерживает динамические сайты ( AJAX), экспорт в Excel/CSV.
  • Octoparse — бесплатный тариф на 10 000 строк/месяц, умеет обходить простые CAPTCHA.
  • Apify — облачный сервис с готовыми "акторами" для парсинга Instagram, Amazon, Google Maps.

Как работает ParseHub:

  1. Установите расширение для Chrome или десктопную версию.
  2. Откройте целевую страницу и выделите данные для парсинга (например, цены товаров).
  3. Настройте правила извлечения (кликните на элемент → Extract).
  4. Запустите парсинг и экспортируйте результат в Excel.

СервисБесплатный тарифПоддержка JS-сайтовЭкспорт в Excel
ParseHubДо 200 страницДаДа
Octoparse10 000 строк/месяцДаДа
Apify$5 кредитаДаЧерез CSV
Scraper (Chrome)НеограниченноНетДа

Минус внешних сервисов — зависимость от их инфраструктуры. Если сервис заблокируют или изменят API, ваш парсинг перестанет работать. Для критичных задач лучше использовать собственные решения (VBA или Python).

🔹 Проверьте, не запрещён ли парсинг в robots.txt сайта (откройте site.com/robots.txt)

🔹 Оцените частоту обновления данных (ежедневно/еженедельно)

🔹 Выберите формат экспорта (Excel, CSV, JSON)

🔹 Настройте расписание автоматического обновления (если нужно)

-->

5. Парсинг с помощью Python + Excel

Для сложных задач (парсинг сотен страниц, работа с API, обработка больших данных) оптимально использовать Python. Библиотеки requests, BeautifulSoup и pandas позволяют извлечь данные и сохранить их в Excel за несколько строк кода. Пример скрипта для парсинга заголовков с Habr:

import requests

from bs4 import BeautifulSoup

import pandas as pd

url = "https://habr.com/ru/all/"

response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')

titles = [h2.text for h2 in soup.find_all('h2', class_='tm-title')]

df = pd.DataFrame(titles, columns=['Заголовки'])

df.to_excel('habr_titles.xlsx', index=False)

Как интегрировать Python с Excel:

  1. Установите Python (версия 3.7+) и библиотеки: pip install requests beautifulsoup4 pandas openpyxl.
  2. Сохраните скрипт в файл .py и запустите его (данные запишутся в habr_titles.xlsx).
  3. Откройте сгенерированный файл в Excel и настройте обновление (например, через Power Query).

⚠️ Внимание: При парсинге Python-скриптом учитывайте:
  • Задержки между запросами (time.sleep(2)), чтобы не забанили.
  • Использование User-Agent и прокси для обхода блокировок.
  • Сохранение промежуточных данных в CSV, если скрипт прервётся.

✔ Обработка тысяч страниц без "подвисаний" Excel

✔ Гибкая логика (можно парсить данные по расписанию, отправлять уведомления)

✔ Интеграция с базами данных (PostgreSQL, MySQL)-->

6. Типичные ошибки и как их исправить

Даже правильно настроенный парсинг может давать сбои. Рассмотрим распространённые проблемы и решения:

ОшибкаПричинаРешение
#N/A в FILTERXMLНеверный XPath или сайт заблокировал запросПроверьте XPath в XPath Tester, добавьте User-Agent
Пустые ячейки в Power QueryСайт изменил структуру HTMLОбновите запрос или используйте относительные XPath (например, //td[1])
403 Forbidden в VBAСайт блокирует автоматические запросыДобавьте заголовки User-Agent и Referer, используйте прокси
Краковые символы (���)Несовпадение кодировок (UTF-8 vs Windows-1251)В Power Query: File.Contents(..., Encoding=65001) (UTF-8)
Макрос не запускаетсяОтключены макросы или антивирус блокирует скриптДобавьте папку с файлом в исключения антивируса, включите макросы в настройках

Если парсинг перестал работать без видимых причин:

  1. Проверьте, не изменил ли сайт структуру (откройте исходный код страницы — Ctrl+U).
  2. Обновите Excel и расширения (в Power Query бывают баги после обновлений Windows).
  3. Попробуйте другой метод (например, если сломался Power Query, используйте VBA).

7. Автоматизация: как обновлять данные по расписанию

Чтобы парсинг работал без вашего участия, настройте автоматическое обновление:

  • В Power Query: Кликните правой кнопкой по запросу → Свойства → установите флажок Обновлять каждые X минут.
  • В VBA: Используйте Application.OnTime для запуска макроса по времени:
    Application.OnTime TimeValue("10:00:00"), "ParseNews"
  • В Python: Настройте задачу в Планировщике заданий Windows или используйте cron (для Linux/Mac).

Для облачного обновления подойдёт Google Sheets + Apps Script. Пример скрипта для автоматического парсинга каждые 6 часов:

function autoParse() {

var url = "https://api.example.com/data";

var response = UrlFetchApp.fetch(url);

var data = JSON.parse(response.getContentText());

SpreadsheetApp.getActiveSheet().getRange(1,1).setValue(data.value);

}

Затем настройте триггер: Редактор скриптов → Триггеры → Добавить триггер → По времени.

Как парсить данные с авторизацией?

Если сайт требует логин/пароль, используйте один из методов:

1. В VBA: Отправляйте POST-запрос с данными формы:

http.send "login=user&password=pass"

2. В Python: Используйте сессию (requests.Session()) для сохранения кук:

session = requests.Session()

session.post("https://site.com/login", data={"user": "name", "pass": "123"})

Важно:
Никогда не храните пароли в открытом виде в коде! Используйте переменные окружения или зашифрованные файлы.

FAQ: Частые вопросы по парсингу в Excel

Можно ли спарсить данные с Instagram/Facebook в Excel?

Прямой парсинг соцсетей через Excel невозможен — их API закрыты для анонимных запросов. Решения:

  • Используйте специализированные сервисы (Apify, Phantombuster).
  • Напишите скрипт на Python с библиотекой instaloader (требуется авторизация).
  • Экспортируйте данные вручную через настройки аккаунта (например, Настройки → Приватность → Загрузить информацию в Facebook).

Почему парсинг работает вручную, но не обновляется автоматически?

Причины и решения:

  • Отключено фоновое обновление: В Power Query проверьте настройки запроса → Свойства → Разрешить обновление в фоновом режиме.
  • Блокировка антивирусом: Добавьте Excel в исключения антивируса или отключите его на время теста.
  • Ошибка в коде: В VBA добавьте обработку ошибок:
    On Error Resume Next
    

    ' ваш код

    If Err.Number <> 0 Then MsgBox "Ошибка: " & Err.Description

Как спарсить данные с сайта, где нужно нажать кнопку "Показать ещё"?

Для динамического контента (подгружаемого после клика) стандартные методы Excel не подходят. Решения:

  • Selenium + Python: Автоматизирует действия в браузере. Пример кода:
    from selenium import webdriver
    

    driver = webdriver.Chrome()

    driver.get("https://example.com")

    button = driver.find_element_by_xpath('//button[text()="Показать ещё"]')

    button.click()

  • ParseHub: Настройте цепочку действий (клик → ожидание → парсинг).

Важно: Selenium требует установки ChromeDriver и занимает много ресурсов.

Законен ли парсинг данных с сайтов?

Юридические нюансы:

  • Разрешено: Парсинг общедоступных данных для личного использования (если нет прямого запрета в robots.txt или Terms of Service).
  • Запрещено:
    • Обход защищённых страниц (например, после авторизации).
    • Нагрузка на сервер (более 1 запроса в секунду).
    • Использование данных в коммерческих целях без согласия владельца.
  • Риски: Сайт может заблокировать ваш IP или подать жалобу на хостинг (если парсинг нарушает их правила).

Рекомендация: Перед парсингом проверьте файл robots.txt (например, https://site.com/robots.txt) на наличие строки Disallow: / (полный запрет).

Как ускорить парсинг больших объёмов данных?

Способы оптимизации:

  • В Excel:
    • Отключите автоматический пересчёт формул (Формулы → Вычисления → Вручную).
    • Используйте Power Query вместо формул — он быстрее обрабатывает большие массивы.
  • В VBA:
    • Добавьте Application.ScreenUpdating = False в начало макроса.
    • Используйте массивы вместо поячеечной записи (Range("A1:A100").Value = ArrayData).
  • В Python:
    • Парсите данные параллельно с multiprocessing или asyncio.
    • Сохраняйте промежуточные результаты в CSV, чтобы не терять прогресс.