Парсинг сайтов в Эксель с помощью VBA
В статье разбирается пример с парсинга сайта прогноза погоды через VBA благодаря подключению и использованию двух типов объектов XMLHTTP и RegExp
Примеров парсинга сайта с использованием подключаемых объектов достаточно много в сети, есть примеры с работой через инициализацию Internet explorer - InternetExplorer.Application:
IE
Sub ЗагрузкаТекстаВебСтраницы()
Set IE = CreateObject("InternetExplorer.Application"): ' загружаем браузер Internet Explorer
On Error Resume Next
addr$ = "http://excelvba.ru/services" ' указываем адрес сайта (веб-страницы), текст которой загружаем
IE.Navigate addr$ ' загружаем сайт
While IE.busy Or (IE.readyState <> 4): DoEvents: Wend ' ждем, пока загрузится страница
' Set ieDoc = IE.Document ' ссылка на открытый документ
txt$ = IE.Document.body.innerText ' считываем текст веб-страницы в текстовую переменную
'[a1] = txt$ ' помещаем текст веб-страницы на лист Excel
IE.Quit: Set IE = Nothing ' закрываем браузер
MsgBox txt$, vbInformation, "Текст веб-страницы " & addr$ ' выводим сообщение с текстом с сайта
End Sub
Источник
Есть варианты через подключение WinHttp - WinHttp.WinHttpRequest.5.1:
WinHttp.WinHttpRequest.5.1
Sub test_internet()
On Error Resume Next
URL$ = "http://ExcelVBA.ru/"
Const TIMEOUT& = 6 ' в секундах
Set xmlhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
xmlhttp.Open "GET", URL$, True: DoEvents
xmlhttp.Send: DoEvents
If Not xmlhttp.WaitForResponse(TIMEOUT&) Then
MsgBox "timeout", URL: Exit Sub
End If
txt$ = xmlhttp.responsetext
MsgBox txt, vbInformation, "Длина ответа: " & Len(txt)
End Sub
Но чаще всего встречаются примеры через подключение объекта MSXML2.XMLHTTP, хотя он практически брат-близнец WinHttp.WinHttpRequest.5.1. по набору команд:
MSXML2.XMLHTTP
Function GetHTTPResponse(ByVal sURL As String) As String
On Error Resume Next
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
With oXMLHTTP
.Open "GET", sURL, False
' раскомментируйте следующие строки и подставьте верные IP, логин и пароль
' если вы сидите за proxy
' .setProxy 2, "192.168.100.1:3128"
' .setProxyCredentials "user", "password"
.send
GetHTTPResponse = .responseText
End With
Set oXMLHTTP = Nothing
End Function
Источник
В этой же статье будет приложен файл и код с максимальным кол-вом комментов для объяснения назначения каждой строки в учебных целях. Авторство оригинального файла принадлежит Гавриленко Игорю - моему коллеге. Я же код немного адаптировал и добавил комментарии, для того чтобы самому разобраться в теме и использовать как наглядное пособие в любых последующих проектах.
Важной особенностью примера является то, что сами данные получаем с сайта через объект MSXML2.XMLHTTP, что как мы прочитали выше не является чем-то особенным, но выделяем из мессива HTML кода только нужные данные используя объект регулярных выражений - VBScript.RegExp.
Собственно сам код можно посмотреть скачав файл с сайта по ссылке ниже
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]