Парсинг содержимого HTML-тегов со страницы сайта в VBA Excel на примере заголовка 2 уровня. Запись извлечённой информации в ячейки рабочего листа.
С помощью VBA Excel можно выполнять веб-запросы и извлекать содержимое определённых HTML-тегов с веб-страниц. Ниже представлен пример парсинга данных из тегов <h2>, которые обычно используются как основные заголовки внутри статей.
Подготовка среды
Прежде чем приступить к написанию кода, необходимо подключить библиотеки, необходимые для работы с HTML и HTTP-запросами:
- Откройте редактор VBA (нажмите Alt + F11).
- Перейдите в меню Tools → References.
- Установите флажки напротив следующих библиотек:
- Microsoft HTML Object Library (для работы с HTML).
- Microsoft XML, v6.0 (для отправки HTTP-запросов).
- Нажмите OK для подтверждения.
Код для парсинга
Ниже приведён готовый пример кода, который загружает страницу, находит все теги <h2> и записывает их содержимое в ячейки рабочего листа Excel:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Sub ParseTags() Dim http As Object Dim html As New HTMLDocument Dim tagElements As Object Dim tag As Object Dim url As String Dim i As Integer ' Укажите нужный URL страницы url = "https://internettovary.ru/avtomoyka-akkumulyatornaya/" ' Создаем объект для HTTP-запроса Set http = CreateObject("MSXML2.XMLHTTP") ' Отправляем GET-запрос http.Open "GET", url, False http.send ' Проверяем успешность запроса If http.Status = 200 Then ' Загружаем HTML в объект HTMLDocument html.body.innerHTML = http.responseText ' Находим все теги <h2> Set tagElements = html.getElementsByTagName("h2") ' Выводим содержимое тегов <h2> в ячейки Excel i = 1 For Each tag In tagElements Cells(i, 1).Value = tag.innerText i = i + 1 Next tag Else MsgBox "Ошибка при получении страницы: " & http.Status End If ' Очистка Set http = Nothing Set html = Nothing End Sub |
Как это работает
- Инициализация:
- Объект
httpсоздается для отправки запроса. - Объект
htmlиспользуется для парсинга HTML-кода.
- Объект
- Запрос к сайту:
- Указываем URL страницы сайта в переменной
url. - Отправляем HTTP-запрос методом
GET.
- Указываем URL страницы сайта в переменной
- Парсинг данных:
- Если получен код ответа 200 (успешный запрос), содержимое страницы загружается в HTML-документ (переменная
html). - Метод
getElementsByTagName("h2")извлекает содержимое всех тегов<h2>в HTML-документе.
- Если получен код ответа 200 (успешный запрос), содержимое страницы загружается в HTML-документ (переменная
- Вывод в Excel:
- Содержимое каждого тега
<h2>записывается в столбец A, начиная с первой строки.
- Содержимое каждого тега
- Обработка ошибок:
- Если страница не загрузилась, выводится сообщение с кодом ошибки.
Примечания
- Если содержимое тегов
<h2>формируется с помощью JavaScript на стороне клиента, данный метод не сработает, так какXMLHTTPвидит только исходный HTML. - В случае проблем с отображением символов (например, кириллицы) может потребоваться дополнительная перекодировка текста. Для указанного в примере сайта таких проблем не возникало.
- Чтобы спарсить содержимое других HTML-тегов, замените
"h2"на нужный тег в строке:
1Set tagElements = html.getElementsByTagName("h2")
Например на:"p","ol","ul","a","span".
С помощью кода на VBA вы можете быстро собрать заголовки или другие текстовые элементы со страницы сайта и отобразить их в таблице Excel. Это удобный способ автоматизировать сбор контента без использования сторонних парсеров и браузеров.