Авторизация

Рубрики блога


Рекомендуем



Последние комментарии

Облако тегов


Устами великих

"Странный этот мир, где двое смотрят на одно и то же, а видят полностью противоположное." © Агата Кристи

Реклама



MS Office и VBA Рубрика содержит интересные решения, малоизвестные функции и возможности, надстройки и макросы, в общем, все то, что может сделать вашу работу в пакете программ MS Office (в первую очередь - Excel, Word, Access) более эффективной.
29
Июл

Парсинг сайтов в Эксель с помощью VBA

рейтинг материал 4.0 (2) | количество просмотров 1930 | количество коментариев 0
В статье разбирается пример с парсинга сайта прогноза погоды через VBA благодаря подключению и использованию двух типов объектов XMLHTTP и RegExp
Download source

Примеров парсинга сайта с использованием подключаемых объектов достаточно много в сети, есть примеры с работой через инициализацию 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.

Собственно сам код можно посмотреть скачав файл с сайта по ссылке ниже

Download source
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]