Поиск по сайту с помощью excel

 

Друзья подскажите возможно ли это.  
  Жмем кнопку в экселе, происходит переход на нужный нам сайт и копирование от туда информации в таблицу.  
Во вложении простенький пример.

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Возможно все :)  
Пример подобного макроса можно посмотреть например здесь:  

http://www.planetaexcel.ru/forum.php?thread_id=35717  

Остается переделать под ваши нужды.

 

Да с курсами валют оч занятно но вникнуть пока не получается.  
Может кто то поможет с макросом  
Нужно чтобы Макрос кликал например на сайте Яндекса по кнопке «Найти»  
Буду оч признателен.

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

Заполнить строку поиска и нажать на кнопку через vba можно используя webbrowser.  
только вот извлечь результаты поиска — трудно. в goggle вообще наверное невозможно это сделать, в yandex — можно но с диким извратом. на авито не знаю — регистрироваться там вообще неохота.    
Вся фишка в том, что результаты поиска не хранятся в таблицах. Для их отображения используются отдельные классы, или скрипты.    

    «Нужно чтобы Макрос кликал например на сайте Яндекса по кнопке «Найти»»  

  создайте форму, всавьте на нее элемент webbrowser, на код открытия формы повесить вот такой макрос    
Private Sub UserForm_Activate()  
s = «www.ya.ru»  
Me.WebBrowser1.Navigate s  
Do While Me.WebBrowser1.Busy Or (Me.WebBrowser1.ReadyState <> 4): DoEvents: Loop  
Me.WebBrowser1.Document.forms(0).elements.Item(0).Value = «шкафы»  
Me.WebBrowser1.Document.forms(0).elements.Item(1).Click  
end sub

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Так Вам нужно с Яндекса или с Авито?

 

Я просто пытаюсь понять суть, просто хотелось получить пример с авито или яндекса что бы дальше разобраться самому.  

  egonomist: Вы могли бы сделать пример, битый час пытаюсь сделать но не получается.

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

Вообще, у меня такой вопрос часто возникает. Но думал не Экселевского ума это дело. Я пишу в определенном столбец, скажем D (D1,D2,D3 и т.д), ссылки на сайты, на которых должен производится поиск. А в А1  забиваю фразу которая будет искаться. Нажимаю кнопочку макроса. Опера сама открывает эти сайты, вставляет туда эту фразу и .. все сайты остаются открытыми. Затем я прохожу и просматриваю, что, где нашлось… Было бы здорово иметь такой поиск. В основном мне это нужно для поиска автозапчасти. Спасибо.  

  ———  
35030

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Вот с avito забирает первые три объявления, из региона Москва, по введенному слову, и формирует гиперссылки на эти объявления.

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

tintin:  
Выкладываю пример — за основу взял файл вот отсюда  

http://www.planetaexcel.ru/forum.php/links.php?thread_id=8251  

добавил одну кнопку — поиск  
взял код вот отсюда  

http://www.planetaexcel.ru/forum.php?thread_id=38428  

  в итоге — открываете книгу — пишите в ячейке B11 что надо найти — нажимаете квадратик с надписью internet — загружается браузер — щелкаете кнопку поиск.  

  если нужно без окошка webbrowser то опять же все тут  

http://www.planetaexcel.ru/forum.php?thread_id=38428  

  Владимир: я не знаю как в explorer открывать программно вкладки, поэтому пока управление только одной вкладкой — одна ссылка. Для каждого сайта надо найти element для ввода текста и кнопку.    
Для этого делаю webbrowser.navigate «www.ya.ru»  
на следующей строке breakpoint  
webbrowser в watch window  
в watch window идем по иерархии-  
webbrowser — document — forms — item1 — elemets —    
просматриваем все elements и угадываем где текст а где кнопа —    
в коде уже присваиваем текст для поска и щелкаем кнопку  
и

 

{quote}{login=sva}{date=01.03.2012 12:20}{thema=}{post}Вот с avito забирает первые три объявления, из региона Москва, по введенному слову, и формирует гиперссылки на эти объявления.{/post}{/quote}  

  Просто супер! Спасибо Огромное!  
Вы могли бы сделать аналогичный, урощенный пример где    
  при нажатии в эксель кнопки «запрос» происходит клик по кнопке найти на сайте авито (москва)  

  т.е. на сайт я например зашел сам, сам ввел слово шкаф, а при нажатии в экселе «Запрос» нужен клик на авито — Найти

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

В моем примере нужно только вводить нужные слова в inputbox, и нажимать кнопку.  
Зачем нужны лишние телодвижения?

 

Для самообразования ))  
Просто хочу посмотреть как выглядит данный макрос, если не трудно сделайте пожалуйста )

 

sva

Пользователь

Сообщений: 1027
Регистрация: 23.12.2012

Я ленюсь, да и некогда мне сейчас :)  
Смотрите пример получения данных с сайта налоговой.  
От Вас требуется вводить капчу и жать кнопку получить данные.

 

{quote}{login=egonomist}{date=01.03.2012 12:34}{thema=}{post}…в watch window идем по иерархии-  
webbrowser — document — forms — item1 — elemets —    
просматриваем все elements …{/post}{/quote}  
Скажите что значит просматриваем все элементс…как их просмотреть? где написано что это итем и элемент такой-то такой-то? надо вызвать какое-то Watch window? подскажите пжл..

 

egonomist

Пользователь

Сообщений: 409
Регистрация: 21.12.2012

1) в редакторе visual basic в верхней панели View — Watch window  
появится окошко, пока пустое.    
2) в макросе ставите точку остановки breakpoint после строки с определением нужной вам переменной — например после webbrowser.navigate «www.ya.ru»  
(поставьте курсор на строку — нажмите f9)  
3) запустите макрос. Его выполнение остановится на breakpoint    
4) наведите курсор на слово webbrowser — щелчок правой кнопкой мыши — add Watch…  
5)После этого в окне watch window появится нужная нам переменная/объект со всеми свойствами. Для объектов доступна вся иерархия свойств и атрибутов.  
Рядом с webbrowser плюсик — нажимаем его раскрывается список.  
раскрываем его в следующем порядке  
webbrowser — document — forms — item1 — elemets —    
в elements будут item по значениям их атрибутов (name, text, value, onSubmit…) определяем что к чему.

 

Спасибо огромное за подсказку)

 

блин..совершенно не понятно как Вы определили что итем 0 это текстовое поле, а итем 2 кнопка…более того я там даже итем 0 то и не нашёл…блин((( у меня в элементс только итем 1, 2 и 3…

 

Ребят а подскажите пожалуйста, как подправить код, чтобы все эти запросы работали через гугл хром?

 

Никак не подправить.  
Все майкрософтовские программы (в т.ч. и Excel) для запросов в интернет используют исключительно один браузер, встроенный в Windows — Internet Explorer

 

subtlety

Пользователь

Сообщений: 375
Регистрация: 01.01.1970

надстройка:   

http://www.rondebruin.nl/Google.htm  

выдает результаты поиска в браузере по умолчанию (Firefox у меня)

 

а что именно надо?? в чем затык?

 

да вот не могу определить что item 0 — текстовое поле, а item 2 — кнопка, помимо этого у меня даже нету итем 0 на сайте

www.ya.ru

по пути: webbrowser — document — forms — item1 — elemets — ….

 

Geo28

Пользователь

Сообщений: 6
Регистрация: 27.12.2012

усе..вроде без итемов справился..только вот нужна помощь, подскажите как сделать так чтобы при активации определенной ячейки браузер открывался, а когда активируется след ячейка то закрывался? и второе как сделать чтобы например при активации ячейки а1 браузер автоматом открывался на яндексе, а при активации на в1 на гугле…неужели вторую форму надо создавать..

 

Юрий М

Модератор

Сообщений: 60586
Регистрация: 14.09.2012

Контакты см. в профиле

А в А1 и В1 соответствующие гиперссылки — не выход?

 

Geo28

Пользователь

Сообщений: 6
Регистрация: 27.12.2012

нее..планируется в а1 и в1 вбивать цифры, при активации а1 сразу автоматом открывается браузер на нужном сайте и можно проверить какое значение внести в а1, потом вбиваются другие знач в других ячеках — там а2 а3 а4 и когда дело доходит до в1 снова откр браузер на другом уже сайте, со значениями для в1..

 

Юрий М

Модератор

Сообщений: 60586
Регистрация: 14.09.2012

Контакты см. в профиле

#26

13.05.2012 10:56:30

Можно так.

Прикрепленные файлы

  • post_334009.xls (21.5 КБ)

Парсить сайты в Excel достаточно просто если использовать облачную версию софта Google Таблицы (Sheets/Doc), которые без труда позволяют использовать мощности поисковика для отправки запросов на нужные сайты.

  • Подготовка;
  • IMPORTXML;
  • IMPORTHTML;
  • Обратная конвертация.

Видеоинструкция

Подготовка к парсингу сайтов в Excel (Google Таблице)

Для того, чтобы начать парсить сайты потребуется в первую очередь перейти в Google Sheets, что можно сделать открыв страницу:

https://www.google.com/intl/ru_ru/sheets/about/

Главная страница Google таблицы

Потребуется войти в Google Аккаунт, после чего нажать на «Создать» (+).

Создание нового документа в Google Таблицах

Теперь можно переходить к парсингу, который можно выполнить через 2 основные функции:

  • IMPORTXML. Позволяет получить практически любые данные с сайта, включая цены, наименования, картинки и многое другое;
  • IMPORTHTML. Позволяет получить данные из таблиц и списков.

Однако, все эти методы работают на основе ссылок на страницы, если таблицы с URL-адресами нет, то можно ускорить этот сбор через карту сайта (Sitemap). Для этого добавляем к домену сайта конструкцию «/robots.txt». Например, «seopulses.ru/robots.txt».

Здесь открываем URL с картой сайта:

robots.txt сайта для парсинга в Excel

Нас интересует список постов, поэтому открываем первую ссылку.

Карта сайта для парсинга в Excel

Получаем полный список из URL-адресов, который можно сохранить, кликнув правой кнопкой мыши и нажав на «Сохранить как» (в Google Chrome).

Скачивание карты сайта для парсинга в Эксель

Теперь на компьютере сохранен файл XML, который можно открыть через текстовые редакторы, например, Sublime Text или NotePad++.

Карта сайта в текстовом рекдакторе NotePad++

Чтобы обработать информацию корректно следует ознакомиться с инструкцией открытия XML-файлов в Excel (или создания), после чего данные будут поданы в формате таблицы.

Список URL чтобы можно было спарсить в Excel

Все готово, можно переходить к методам парсинга.

IPMORTXML для парсинга сайтов в Excel

Синтаксис IMPORTXML в Google Таблице

Для того, чтобы использовать данную функцию потребуется в таблице написать формулу:

=IMPORTXML(Ссылка;Запрос)

Пример использования IMPORTXML в Google Таблице

Где:

  • Ссылка — URL-адрес страницы;
  • Запрос – в формате XPath.

С примером можно ознакомиться в:

https://docs.google.com/spreadsheets/d/1xmzdcBPap6lA5Gtwm1hjQfDHf3kCQdbxY3HM11IqDqY/edit#gid=0

Примеры использования IMPORTXML в Google Doc

Парсинг названий

Для работы с парсингом через данную функцию потребуется знание XPATH и составление пути в этом формате. Сделать это можно открыв консоль разработчика. Для примера будет использоваться сайт крупного интернет-магазина и в первую очередь необходимо в Google Chrome открыть окно разработчика кликнув правой кнопкой мыли и в выпавшем меню выбрать «Посмотреть код» (сочетание клавиш CTRL+Shift+I).

Просмотр кода страницы в Google Chrome

После этого пытаемся получить название товара, которое содержится в H1, единственным на странице, поэтому запрос должен быть:

//h1

И как следствие формула:

=IMPORTXML(A2;»//h1″)

Пример использования IMPORTXML для парсинга H1 в Google Таблице

Важно! Запрос XPath пишется в кавычках «запрос».

Парсинг различных элементов

Если мы хотим получить баллы, то нам потребуется обратиться к элементу div с классом product-standart-bonus поэтому получаем:

//div[@class=’product-standart-bonus’]

Пример рассмотрения структуры XPath при рассмотрении кода сайта

В этом случае первый тег div обозначает то, откуда берутся данные, когда в скобках [] уточняется его уникальность.

Для уточнения потребуется указать тип в виде @class, который может быть и @id, а после пишется = и в одинарных кавычках ‘значение’ пишется запрос.

Однако, нужное нам значение находиться глубже в теге span, поэтому добавляем /span и вводим:

//div[@class=’product-standart-bonus’]/span

В документе:

IMPORTXML в Google Doc с запросом XPath

Парсинг цен без знаний XPath

Если нет знаний XPath и необходимо быстро получить информацию, то требуется выбрав нужный элемент в консоли разработчика кликнуть правой клавишей мыши и в меню выбрать «Copy»-«XPath». Например, при поиске запроса цены получаем:

Копирование XPath для дальнейшего парсинга

//*[@id=»showcase»]/div/div[3]/div[2]/div[2]/div[1]/div[2]/div/div[1]

Важно! Следует изменить » на одинарные кавычки ‘.

Далее используем ее вместе с IMPORTXML.

Использование IMPORTXML в Google Sheets

Все готово цены получены.

Простые формулы с IMPORTXML в Google Sheets

Чтобы получить title страницы необходимо использовать запрос:

=IMPORTXML(A3;»//title»)

IMPORTXML для парсинга title страницы в Google Sheets

Для вывода description стоит использовать:

=IMPORTXML(A3;»//description»)

IMPORTXML для парсинга description страницы в Google Таблице

Первый заголовок (или любой другой):

=IMPORTXML(A3;»//h1″)

IMPORTXML для парсинга H1 страницы в Google Doc

IMPORTHTML для создания парсера веи-ресурсов в Эксель

Синтаксис IMPORTXML в Google Таблице

Для того, чтобы использовать данную функцию потребуется в таблице написать формулу:

=IMPORTXML(Ссылка;Запрос;Индекс)

Использование IMPORTHTML с list в Google Sheets

Где:

  • Ссылка — URL-адрес страницы;
  • Запрос – может быть в формате «table» или «list», выгружающий таблицу и список, соответственно.
  • Индекс – порядковый номер элемента.

С примерами можно ознакомиться в файле:

https://docs.google.com/spreadsheets/d/1GpcGZd7CW4ugGECFHVMqzTXrbxHhdmP-VvIYtavSp4s/edit#gid=0

Пример использования IMPORTHTML в Google Doc

Парсинг таблиц

В примерах будет использоваться данная статья, перейдя на которую можно открыть консоль разработчика (в Google Chrome это можно сделать кликнув правой клавишей мыши и выбрав пункт «Посмотреть код» или же нажав на сочетание клавиш «CTRL+Shift+I»).

Просмотр кода страницы в Google Chrome

Теперь просматриваем код таблицы, которая заключена в теге <table>.

Поиск в коде страницы таблицы для парсинга через IMPORTHTML в Google Таблицах

Данный элемент можно будет выгрузить при помощи конструкции:

=IMPORTHTML(A2;»table»;1)

Пример использования IMPORTHTML c table в Google Doc

  • Где A2 ячейка со ссылкой;
  • table позволяет получить данные с таблицы;
  • 1 – номер таблицы.

Важно! Сам запрос table или list записывается в кавычках «запрос».

Парсинг списков

Получить список, заключенный в тегах <ul>…</ul> при помощи конструкции.

=IMPORTHTML(A2;»list»;1)

Пример использования IMPORTHTML c list в Google Sheets

В данном случае речь идет о меню, которое также представлено в виде списка.

Просмотр списка в коде сайта для использования с IMPORTHTML c list в Google Таблицах

Если использовать индекс третей таблицы, то будут получены данные с третей таблицы в меню:

Просмотр третьего списка в коде сайта для использования с IMPORTHTML c list с индексом 3 в Google Docs

Формула:

=IMPORTHTML(A2;»list»;2)

Просмотр третьего списка в коде сайта для использования с IMPORTHTML c list с индексом 3 в Google Docs

Все готово, данные получены.

Обратная конвертация

Чтобы превратить Google таблицу в MS Excel потребуется кликнуть на вкладку «Файл»-«Скачать»-«Microsoft Excel».

Скачивание файла MS Excel в Google Doc

Все готово, пример можно скачать ниже.

Сохраненный файл MS Excel из Google Sheets

Пример:

https://docs.google.com/spreadsheets/d/1xmzdcBPap6lA5Gtwm1hjQfDHf3kCQdbxY3HM11IqDqY/edit

На первый взгляд Excel и парсинг понятия несовместимые. Как с помощью табличного редактора можно получать информацию из сети? И ведь многие недооценивают Excel, а это вполне посильная задача для него. При этом все делается стандартными методами без необходимости дополнительно что-то устанавливать/настраивать.

Разберем на конкретном примере по получению информации с сайта Минюста, а именно, нам необходим перечень действующих адвокатов Российской Федерации. Кнопки «выгрузить списочно всех адвокатов» — конечно же, нет. На официальном сайте http://lawyers.minjust.ru/ выводится по 20 адвокатов на 1 странице, всего 74 754 страниц, итого на выходе мы должны получить чуть меньше 150 тыс. адвокатов.

Для начала открываем VBA и создаем объект InternetExplorer, посредством которого будем получать данные.

Затем надо определить, как будем переходить между страницами на сайте – для этого просматриваем элемент перехода на следующую страницу. Ссылка между станицами отличается значением в конце и соответствует номеру страницы – 1.

Имея информацию о ссылке страницы — осуществляем их перебор, загружаем в InternetExplorer и забираем все данные со страницы.

В коде страницы представлена структура таблицы со всеми столбцами, которые нам необходимы: реестровый номер, ФИО адвоката, субъект РФ, номер удостоверения, текущий статус.

Для получения этой информации с помощью ключевых слов осуществляем поиск по тегам и забираем требуемые данные.

В итоге получаем список всех адвокатов в таблицу Excel для дальнейшей обработки.

  • Интернет
  • Поиск в интернете
  • Интернет-порталы
  • Поиск в Excel
  • Контекстное меню
  • Средства Windows

Макрос для поиска текста выделенных ячеек в Google

Макрос предназначен для поиска текста из выделенных ячеек в поисковой системе Google.

Функция поиска доступна из контекстного меню ячеек:

добавление пункта поиска в контекстное меню ячеек Excel

Как вы можете видеть на скриншоте, есть возможность выбора браузера.
На выбор представлены наиболее популярные браузеры: Internet Explorer, Mozilla Firefox, Opera, и Google Chrome.

В макрос намеренно введено ограничение на количество ячеек, текст из которых можно одномоментно запустить в поиск.

Если количество уникальных непустых значений в выделенных ячейках превысит 20, поиск будет отменён,
а пользователь увидит сообщение с предупреждением:

предупреждение  о превышении допустимого количества ячеек

Код (см. пример в прикреплённом файле) состоит из 2 макросов.

Макрос CreateItemsInCellContextMenu запускается автоматически, при каждом щелчке правой кнопкой мыши на листе,
и добавляет новые пункты в контекстное меню ячейки.

Sub CreateItemsInCellContextMenu()
    On Error Resume Next
    PopularBrowsers = Array("Internet Explorer", "Mozilla Firefox", "Opera", "Google Chrome")
 
    Application.CommandBars("cell").Reset    ' сброс контекстного меню ячеек
    Application.CommandBars("cell").Controls(1).BeginGroup = True    ' черточка над первым пунктом меню

    ' добавляем пункты в контекстное меню ячеек
    With Application.CommandBars("cell").Controls.Add(10, , , 1)
        .Caption = "Искать через другой браузер ..."
 
        ' добавляем подпункты в меню
        For Each browser In PopularBrowsers    ' для каждого браузера - свой подпункт меню
            With .Controls.Add(1, , , 1)    ' добавляем пункт меню
                .OnAction = "SearchValuesInWeb"    ' назначаем кнопке макрос SearchValuesInWeb
                .Caption = browser: .Tag = browser    ' в свойстве TAG запоминаем название браузера
            End With
        Next
    End With
 
    ' отдельный пункт - для поиска в браузере, установленном в системе по-умолчанию
    With Application.CommandBars("cell").Controls.Add(1, , , 1)
        .OnAction = "SearchValuesInWeb"    ' назначаем кнопке макрос SearchValuesInWeb
        .Caption = "Искать в Google в браузере по-умолчанию"
    End With
End Sub

Макрос SearchValuesInWeb запускается, когда вы щелкаете на одном из добавленных в меню пунктов,
определяет, в каком браузере надо выполнить поиск, и запускает поиск каждого значения из выделенного диапазона.

Sub SearchValuesInWeb()
    ' Макрос открывает в выбранном браузере результаты поиска значений из ячеек
    ' поиск производится в Google

    On Error Resume Next: Err.Clear
    browser$ = Application.CommandBars.ActionControl.Tag    ' читаем параметр из свойства TAG
    If Err Then Exit Sub    ' запуск не из контекстного меню

    maxCellsCount = 20    ' больше 20 ячеек - отказываемся от запуска поиска

    Dim coll As New Collection
    ' берем только непустые уникальные значения из выделенного диапазона ячеек
    Dim ra As Range: Set ra = Intersect(Selection, ActiveSheet.UsedRange)
    arr = ra.Value: If ra.Cells.Count = 1 Then arr = Array(ra(1))
    For Each Item In arr
        If Len(Trim(Item)) Then coll.Add CStr(Trim(Item)), CStr(Trim(Item))
        If coll.Count > maxCellsCount Then Exit For
    Next
 
    ' если случайно запустить поиск тысячи значений - комп подвиснет надолго...
    If coll.Count > maxCellsCount Then
        msg = "Количество значений для поиска провысило ограничение в " & maxCellsCount & " ячеек!"
        MsgBox msg, vbExclamation, "Слишком много значений - поиск отменяется"
        Exit Sub
    End If
 
    ' формируем путь к выбранному браузеру (в реестре нужную информацию выкопать сложно...)
    ' не факт, что быдет работать на всех компах (программы могли быть установлены в другие папки)
    Select Case browser$    ' "Internet Explorer", "Mozilla Firefox", "Opera", "Google Chrome"
        Case "Internet Explorer"
            Path$ = """" & Environ("ProgramFiles") & "Internet ExplorerIEXPLORE.EXE" & """"
        Case "Mozilla Firefox"
            Path$ = """" & Environ("ProgramFiles") & "Mozilla Firefoxfirefox.exe" & """ -new-tab "
        Case "Opera"
            Path$ = """" & Environ("ProgramFiles") & "Operaopera.exe" & """"
        Case "Google Chrome"
            Path$ = """" & Environ("USERPROFILE") & "Local SettingsApplication Data" _
                    & "GoogleChromeApplicationchrome.exe" & """"
    End Select
 
    ' проверяем существование исполняемого файла браузера
    Path2$ = Path$: If Dir(Split(Path$, Chr(34))(1), vbNormal) = "" Then Path2$ = ""
 
    For Each Item In coll    ' перебираем все уникальные значения ячеек
        ' формируем поисковую ссылку для Google
        n = n + 1: link$ = """" & "http://www.google.ru/search?hl=ru&newwindow=1&q=" & Item & """"
 
        If browser$ = "" Then    ' открываем ссылку в браузере "по-умолчанию"
            CreateObject("wscript.shell").Run link$
 
        Else    ' запускаем нужный браузер
            If Len(Path2$) Then    ' если exe-файл нужного браузера найден, то
                ' запускаем браузер для открытия ссылки
                CreateObject("wscript.shell").Run Path$ & " " & link$
            Else
                ' выводим сообщение, что браузер не найден
                Debug.Print "Browser " & browser$ & " not found: " & Path$
            End If
        End If
 
        ' после первой ссылки дожидаемся запуска браузера (1 секунду)
        If n = 1 Then Application.Wait Now + 1 / 86400
    Next
End Sub
  • 38640 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Пользовательские функции VBA Excel для парсинга сайтов, html-страниц и файлов, возвращающие их текстовое содержимое. Примеры записи текста в переменную.

Парсинг html-страниц (msxml2.xmlhttp)

Пользовательская функция GetHTML1 (VBA Excel) для извлечения (парсинга) текстового содержимого из html-страницы сайта по ее URL-адресу с помощью объекта «msxml2.xmlhttp»:

Function GetHTML1(ByVal myURL As String) As String

On Error Resume Next

    With CreateObject(«msxml2.xmlhttp»)

        .Open «GET», myURL, False

        .send

        Do: DoEvents: Loop Until .readyState = 4

        GetHTML1 = .responseText

    End With

End Function

Парсинг сайтов (WinHttp.WinHttpRequest.5.1)

Пользовательская функция GetHTML2 (VBA Excel) для извлечения (парсинга) текстового содержимого из html-страницы сайта по ее URL-адресу с помощью объекта «WinHttp.WinHttpRequest.5.1»:

Function GetHTML2(ByVal myURL As String) As String

On Error Resume Next

    With CreateObject(«WinHttp.WinHttpRequest.5.1»)

        .Open «GET», myURL, False

        .send

        Do: DoEvents: Loop Until .readyState = 4

        GetHTML2 = .responseText

    End With

End Function

Парсинг файлов (ADODB.Stream)

Пользовательская функция GetText (VBA Excel) для извлечения (парсинга) текстового содержимого из файла (.txt, .csv, .mhtml), сохраненного на диск компьютера, по его полному имени (адресу) с помощью объекта «ADODB.Stream»:

Function GetText(ByVal myFile As String) As String

On Error Resume Next

    With CreateObject(«ADODB.Stream»)

        .Charset = «utf-8»

        .Open

        .LoadFromFile myFile

        GetText = .ReadText

        .Close

    End With

End Function

Примеры записи текста в переменную

Общая формула записи текста, извлеченного с помощью пользовательских функций VBA Excel, в переменную:

Dim htmlText As String

htmlText = GetHTML1(«Адрес сайта (html-страницы)»)

htmlText = GetHTML2(«Адрес сайта (html-страницы)»)

htmlText = GetText(«Полное имя файла»)

Конкретные примеры:

htmlText = GetHTML1(«https://internettovary.ru/nabor-dlya-vyrashchivaniya-veshenki/»)

htmlText = GetHTML2(«https://internettovary.ru/nabor-dlya-vyrashchivaniya-veshenki/»)

htmlText = GetText(«C:UsersEvgeniyDownloadsНовый текстовый документ.txt»)

htmlText = GetText(«C:UsersEvgeniyDownloadsИспользование msxml2.xmlhttp в Excel VBA.mhtml»)

В понятие «парсинг», кроме извлечения текстового содержимого сайтов, html-страниц или файлов, входит поиск и извлечение конкретных данных из всего полученного текстового содержимого.

Пример извлечения email-адресов из текста, присвоенного переменной, смотрите в последнем параграфе статьи: Регулярные выражения (объекты, свойства, методы).

Парсинг содержимого тегов

Извлечение содержимого тегов с помощью метода getElementsByTagName объекта HTMLFile:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub Primer1()

Dim myHtml As String, myFile As Object, myTag As Object, myTxt As String

    ‘Извлекаем содержимое html-страницы в переменную myHtml с помощью функции GetHTML1

    myHtml = GetHTML1(«https://internettovary.ru/sadovaya-nozhovka-sinitsa/»)

    ‘Создаем объект HTMLFile

    Set myFile = CreateObject(«HTMLFile»)

    ‘Записываем в myFile текст из myHtml

    myFile.body.innerHTML = myHtml

    ‘Присваиваем переменной myTag коллекцию одноименных тегов, имя которого

    ‘указанно в качестве аргумента метода getElementsByTagName

    Set myTag = myFile.getElementsByTagName(«p»)

    ‘Выбираем, содержимое какого тега по порядку, начинающегося с 0, нужно извлечь

    myTxt = myTag(5).innerText

    MsgBox myTxt

    ‘Большой текст может не уместиться в MsgBox, тогда для просмотра используйте окно Immediate

    ‘Debug.Print myTxt

End Sub

С помощью этого кода извлекается текст, расположенный между открывающим и закрывающим тегами. В примере — это текст 6-го абзаца (p) между 5-й (нумерация с 0) парой отрывающего <p> и закрывающего </p> тегов.

Примеры тегов, используемых в html: "p", "title", "h1", "h2", "table", "div", "script".

Пример извлечения содержимого тега "title":

Sub Primer2()

Dim myHtml As String, myFile As Object, myTag As Object, myTxt As String

    myHtml = GetHTML1(«https://internettovary.ru/sadovaya-nozhovka-sinitsa/»)

    Set myFile = CreateObject(«HTMLFile»)

    myFile.body.innerHTML = myHtml

    Set myTag = myFile.getElementsByTagName(«title»)

    myTxt = myTag(0).innerText

    MsgBox myTxt

End Sub

Парсинг содержимого Id

Извлечение текстового содержимого html-элементов, имеющих уникальный идентификатор — Id, с помощью метода getElementById объекта HTMLFile:

Sub Primer3()

Dim myHtml As String, myFile As Object, myTag As Object, myTxt As String

    myHtml = GetHTML1(«https://internettovary.ru/sadovaya-nozhovka-sinitsa/»)

    Set myFile = CreateObject(«HTMLFile»)

    myFile.body.innerHTML = myHtml

    ‘Присваиваем переменной myTag html-элемент по указанному в скобках Id

    Set myTag = myFile.getElementById(«attachment_465»)

    ‘Присваиваем переменной myTxt текстовое содержимое html-элемента с Id

    myTxt = myTag.innerText

    MsgBox myTxt

    ‘Большой текст может не уместиться в MsgBox, тогда для просмотра используйте окно Immediate

    ‘Debug.Print myTxt

End Sub

Для реализации представленных здесь примеров могут понадобиться дополнительные библиотеки. В настоящее время у меня подключены следующие (к данной теме могут относиться последние шесть):

  • Visual Basic For Applications
  • Microsoft Excel 16.0 Object Library
  • OLE Automation
  • Microsoft Office 16.0 Object Library
  • Microsoft Forms 2.0 Object Library
  • Ref Edit Control
  • Microsoft Scripting Runtime
  • Microsoft Word 16.0 Object Library
  • Microsoft Windows Common Controls 6.0 (SP6)
  • Microsoft ActiveX Data Objects 6.1 Library
  • Microsoft ActiveX Data Objects Recordset 6.0 Library
  • Microsoft HTML Object Library
  • Microsoft Internet Controls
  • Microsoft Shell Controls And Automation
  • Microsoft XML, v6.0

С этим набором библиотек все примеры работают. Тестирование проводилось в VBA Excel 2016.


Понравилась статья? Поделить с друзьями:
  • Поиск по рисунку word
  • Поиск по примечаниям в word
  • Поиск по примерному совпадению excel
  • Поиск по полям в word
  • Поиск по значению в ячейке если vba excel