Парсинг на VBA: Как собирать данные через Excel

excelПредставьте: у вас есть ассистент, который собирает данные быстрее, чем успеете допить кофе. Хотите мониторить цены, анализировать отзывы или автоматизировать рутину, при этом без изучения языков программирования? Без проблем.

В этом поможет хорошо знакомый Excel. Помните, вам говорили, что не знаете всех его возможностей? Например, не знаете про VBA.

Что такое VBA

VBA (Visual Basic for Applications) — встроенный язык программирования для автоматизации задач в Excel, Access, Word и др. В нем можно создать макросы — автоматизаторы которые выполняют повторяющиеся задачи: обрабатывают данные, отправляют электронные письма или, как в нашем случае, парсят страницы.

 

VBA

Как работает VBA для парсинга

VBA — переводчик между вами и интернетом. Основной инструмент для парсинга — встроенный в Windows XMLHTTP, который отправляет запросы на сайт и получает данные. Затем эти данные "разбираются" с помощью парсера HTML, такого как HTMLDocument.

Вот как выглядит базовый алгоритм:

  1. Отправить запрос к сайту. 
  2. Получить HTML-код страницы. Это "сырье", из которого будете доставать данные.
  3. Найти нужные элементы. Например, цены товаров находятся внутри HTML-тегов, которые можно найти с помощью инспектора кода в браузере.
  4. Записать данные в Excel. А дальше — анализируйте, сортируйте, визуализируйте.

Никаких сложных библиотек и терминалов — все действия происходят внутри привычного интерфейса Excel. Это инструмент для тех, кто хочет быстро перейти к делу, а не тратить недели на изучение программирования.

Если Python — швейцарский нож для программистов, то VBA — точный инструмент хирурга. Он прост, подходит для точечных задач и результат парсинга сразу доступен в Excel. Хотите собрать данные о ценах, построить график и отправить отчет коллегам? С VBA это делают в пару кликов.

Кроме того, VBA подходит для парсинга небольших объемов данных. Если не нужен сложный скрипт для миллионов строк, а надо мониторить десяток сайтов ежедневно, VBA будет лучшим выбором.

Особенности парсинга с VBA

  • Легкость в настройке: Вы работаете в одном окне Excel. Не нужно устанавливать сторонние среды разработки.
  • Мгновенная интеграция: Данные сразу попадают в таблицу Excel — их можно фильтровать, сортировать, строить отчеты.
  • Минимальные требования: Подойдет даже самый старенький компьютер с Windows.

Как подключить прокси и зачем они нужны

В парсинге есть проблема: сайты могут заметить, что вы собираете данные, и ограничить доступ. Прокси — ваша маскировка. Они скрывают IP-адрес, позволяя парсить без риска.

proxy

Как начать?

Когда говорят о парсинге, представляют стандартные задачи: собрать цены, отзывы или заголовки статей. Но VBA способен на большее. Вы знали, что с помощью Excel можно:

  • Анализировать биржевые курсы в реальном времени? Подключаемся к сайтам финансовой аналитики, вытягиваем свежие данные, строим динамические графики.
  • Собирать расписание авиарейсов? Например, чтобы спланировать отпуск или создать автоматическую систему мониторинга самых дешевых билетов.
  • Отслеживать изменения на сайтах вакансий? Хотите быть первым, кто узнает о новой работе мечты? VBA вам поможет.

Как это все делать? Мы не дадим пошаговое решение, но общую канву покажем на примере парсера биржевых курсов.

Отслеживаем биржевые курсы в реальном времени

С помощью VBA вы можете парсить курсы валют, акций или крипты, например, с Yahoo Finance или CoinMarketCap. А потом строить динамические графики, которые обновляются каждую минуту.

Вот как может выглядеть код для парсинга курса валют EUR/USD:

Sub GetExchangeRate()

    Dim http As Object, html As Object

    Dim url As String, exchangeRate As String

   

    ' URL страницы с курсами

    url = "https://www.x-rates.com/table/?from=EUR&amount=1"

   

    ' Запрос к сайту

    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "GET", url, False

    http.Send

   

    ' Читаем HTML

    Set html = CreateObject("HTMLFile")

    html.body.innerHTML = http.responseText

   

    ' Находим курс (пример для таблицы с классом "rateTable")

    exchangeRate = html.getElementsByClassName("rateTable")(0).getElementsByTagName("tr")(1).Cells(1).innerText

    MsgBox "Курс EUR/USD: " & exchangeRate

End Sub

Почему это работает

VBA — о том, чтобы быстро и просто реализовать то, что полезно. Вы получаете инструмент, который:

  • Экономит время.
  • Упрощает рутину.
  • Дает данные, которые раньше получали вручную или не могли получить вообще.

Так что теперь готовы не просто пробовать парсинг с VBA, но и строить собственные решения, которые удивят вас самих. А если понадобится защитить себя от блокировок — помните о прокси. Это простой способ сделать VBA еще мощнее.

Хотите перейти от теории к практике? Откройте Excel, нажмите Alt + F11, вставьте код и попробуйте собрать первые данные. Не забудьте протестировать с прокси — их простая интеграция делает работу с VBA еще удобнее. Вот как это сделать.

Используем прокси при парсинге с VBA

Давайте разберемся, как использовать прокси с VBA для парсинга. Будем работать с готовым кодом парсера и покажем, как добавить прокси. Рассмотрим процесс с начала.

Шаг 1: Подготовьте прокси

Например, вы арендовали несколько серверных прокси. Они могут быть такими:

  • IP: 192.168.0.1
  • Порт: 8080
  • Логин: user123
  • Пароль: pass123

Шаг 2: Откройте редактор VBA

  1. В Excel нажмите Alt + F11 — откроется редактор VBA. Либо, если не получается, добавьте в опциях “Показывать вкладку “Разработчик” на ленте”.

Excel

Далее в появившейся вкладке “Разработчик” выберите Visual Basic.

parsing excel

  1. В редакторе нажмите Insert -> Module, чтобы создать новый модуль для кода.

visual basic

Шаг 3: Вставьте код парсинга с прокси

Теперь давайте настроим парсер для работы через прокси. Мы будем использовать объект MSXML2.XMLHTTP для парсинга, потому что это один из самых простых способов.

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

Sub ParseDataWithProxy()

    Dim http As Object

    Dim url As String

    Dim proxyAddress As String

    Dim proxyPort As String

    Dim proxyUser As String

    Dim proxyPass As String

    ' URL для парсинга

    url = "http://example.com"  ' Замените на URL, который хотите парсить

    ' Настройки прокси (замените на свои данные)

    proxyAddress = "192.168.0.1"  ' Адрес вашего прокси

    proxyPort = "8080"  ' Порт прокси

    proxyUser = "user123"  ' Логин для прокси (если требуется)

    proxyPass = "pass123"  ' Пароль для прокси (если требуется)

 

    ' Создание объекта MSXML2.XMLHTTP

    Set http = CreateObject("MSXML2.XMLHTTP")

 

    ' Настройка прокси

    http.setProxy 2, proxyAddress & ":" & proxyPort, proxyUser, proxyPass  ' 2 — это значение для использования прокси

 

    ' Отправка GET-запроса через прокси

    http.Open "GET", url, False

    http.Send

 

    ' Получаем данные с сайта

    MsgBox http.responseText  ' Покажет HTML-код страницы

End Sub

parsing vba

Шаг 4: Пояснения по коду

  1. URL для парсинга:
  • Замените строку url = "http://example.com" на тот сайт, который хотите парсить.
  1. Настройки прокси:
  • proxyAddress — это IP-адрес вашего прокси-сервера.
  • proxyPort — порт, через который ваш прокси-сервер подключается (например, 8080).
  • proxyUser и proxyPass — логин и пароль для прокси, если они нужны.
  1. Настройка прокси:
  • В строке http.setProxy 2, proxyAddress & ":" & proxyPort, proxyUser, proxyPass мы указываем параметры прокси.
  • 2 — это настройка для использования HTTP-прокси.
  • После этого добавляем адрес прокси и его порт.
  • Если ваш прокси требует аутентификацию, указываем логин и пароль.
  1. Отправка запроса:
  • http.Open "GET", url, False — открываем GET-запрос к указанному URL.
  • http.Send — отправляем запрос.
  • MsgBox http.responseText — выводим в окно сообщение с HTML-кодом ответа сайта (или другие данные).

Шаг 5: Запуск парсинга

  1. После того, как код вставлен в редактор, нажмите F5, чтобы запустить макрос.
  2. Вы получите HTML-код страницы в окне сообщения (MsgBox). Эти данные можно далее обрабатывать, анализировать и записывать в Excel.

Шаг 6: Использование прокси-серверов из списка

Если у вас есть несколько прокси, вы можете настроить цикл для их использования. Например, если вы хотите поочередно использовать разные прокси для запросов, это можно сделать так:

Sub ParseDataWithMultipleProxies()

    Dim http As Object

    Dim url As String

    Dim proxyList As Variant

    Dim i As Integer

 

    ' URL для парсинга

    url = "http://example.com"  ' Замените на нужный URL

 

    ' Список прокси (IP:PORT)

    proxyList = Array( _

        Array("192.168.0.1", "8080", "user123", "pass123"), _

        Array("192.168.0.2", "8080", "user456", "pass456") _

    )

 

    ' Цикл по прокси

    For i = LBound(proxyList) To UBound(proxyList)

        ' Создание объекта MSXML2.XMLHTTP

        Set http = CreateObject("MSXML2.XMLHTTP")

 

        ' Настройка прокси

        http.setProxy 2, proxyList(i)(0) & ":" & proxyList(i)(1), proxyList(i)(2), proxyList(i)(3)

 

        ' Отправка GET-запроса через прокси

        http.Open "GET", url, False

        http.Send

 

        ' Вывод полученных данных

        MsgBox "Data from proxy " & proxyList(i)(0) & ": " & vbCrLf & http.responseText

    Next i

End Sub

Шаг 7: Что делать с полученными данными?

Теперь, когда настроили парсинг с прокси, полученные данные (HTML-код) можно обрабатывать с помощью VBA. Например:

  • Использовать регулярные выражения для извлечения нужных данных.
  • Записывать данные в Excel для дальнейшего анализа.
  • Сохранять результаты в текстовые файлы.

Теперь вы примерно представляете как парсят с VBA, а также зачем это делают.