Если вам нужно перенести таблицы с сайта в 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 для Windows (в Mac и онлайн-версии — нет).
⚠️ Внимание: Если формула возвращает#VALUE!, проверьте:
- Корректность XPath (сайты часто меняют структуру).
- Наличие
https://в URL (без протокола не работает).- Отключены ли блокировщики рекламы — они могут мешать загрузке данных.
2. Power Query: парсинг с трансформацией данных
Power Query (вкладка Данные → Получить данные) — встроенный инструмент Excel для импорта и преобразования данных. Он поддерживает парсинг из веб-источников, JSON, XML и даже баз данных. Главное преимущество перед формулами — возможность очистки данных "на лету": удаление лишних столбцов, замена текста, объединение таблиц.
Алгоритм парсинга через Power Query:
- Перейдите на вкладку
Данные → Получить данные → Из других источников → Из веб. - Вставьте URL страницы (например,
https://example.com/prices). - В открывшемся окне выберите таблицу (если сайт их поддерживает) или нажмите
Дополнительнодля ручного XPath. - Настройте трансформации (например, удалите пустые строки командой
Таблица → Удалить строки → Пустые строки). - Нажмите
Закрыть и загрузить— данные появятся на новом листе.
| Тип данных | Источник | Пример 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.
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:
- Установите расширение для Chrome или десктопную версию.
- Откройте целевую страницу и выделите данные для парсинга (например, цены товаров).
- Настройте правила извлечения (кликните на элемент →
Extract). - Запустите парсинг и экспортируйте результат в Excel.
| Сервис | Бесплатный тариф | Поддержка JS-сайтов | Экспорт в Excel |
|---|---|---|---|
| ParseHub | До 200 страниц | Да | Да |
| Octoparse | 10 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:
- Установите Python (версия 3.7+) и библиотеки:
pip install requests beautifulsoup4 pandas openpyxl. - Сохраните скрипт в файл
.pyи запустите его (данные запишутся вhabr_titles.xlsx). - Откройте сгенерированный файл в 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) |
| Макрос не запускается | Отключены макросы или антивирус блокирует скрипт | Добавьте папку с файлом в исключения антивируса, включите макросы в настройках |
Если парсинг перестал работать без видимых причин:
- Проверьте, не изменил ли сайт структуру (откройте исходный код страницы —
Ctrl+U). - Обновите Excel и расширения (в Power Query бывают баги после обновлений Windows).
- Попробуйте другой метод (например, если сломался 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 webdriverdriver = 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, чтобы не терять прогресс.
- Парсите данные параллельно с