Статья является инструкцией по надстройке Parser

Действие парсера «HTML: Поиск тегов»

Действие "HTML: Поиск тегов" (далее - Действие) является одним из основных действий программы, при помощи которого можно осуществлять разнообразные операции с html-тегами - поиск, удаление, извлечение из тегов атрибутов и т.д.

Действие имеет 4 параметра:

  1. Тип элемента
  2. Название проверяемого атрибута
  3. Значение проверяемого атрибута
  4. Тип результата / извлекаемый атрибут
Действие Параметр Значение
HTML: Поиск тегов Тип элемента a
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<ul><li><a href="/popular" target="_self">Поиск HTML тегов</a></li>
<li><a href="/NewArticles2" target="_self">Последние публикации</a></li>
<li><a href="/tools" target="_self">Инструменты разработчика</a></li></ul>
 
<a href="/popular" target="_self">Поиск HTML тегов</a>
<a href="/NewArticles2" target="_self">Последние публикации</a>
<a href="/tools" target="_self">Инструменты разработчика</a>

В данном примере мы в куске кода ищем теги <a> и на выходе получаем массив из 3 элементов.

Параметр Тип элемента

Обязательный параметр, в котором указывается тип тега, который мы ищем. Может указываться любое значение - не только стандартные теги, но вообще любой тег. Например, в приведенном ниже куске XML мы можем искать тег matchCollectionId

Действие Параметр Значение
HTML: Поиск тегов Тип элемента matchCollectionId
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат
<tournament><id>72040</id><type>fantasy</type><userId></userId><whiteLabelId>1</whiteLabelId><matchCollectionId>7347</matchCollectionId><maxPlayersPerTeam>3</maxPlayersPerTeam><name>Full Round </name><buyIn>10.00</buyIn><freeroll>False</freeroll><substitutes>1</substitutes></tournament>
 
<matchCollectionId>7347</matchCollectionId>

Отдельно стоит указать, что можно использовать значение первого параметра - Any Tag - это значит, что будет искаться любой тег, удовлетворяющий условиям 2 и 3 параметров Действия.

Параметры Название проверяемого атрибута и Значение проверяемого атрибута

Обычно эти параметры используются вместе. Давайте рассмотрим на примере, как они работают, а заодно покажем пример использования значения Any Tag в первом параметре.

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута class
Значение проверяемого атрибута Main
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span class="Main">Поиск HTML тегов</span>
<span class="NotMain">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>
<span>Поиск HTML тегов</span>
<tr id="Main">Поиск HTML тегов</tr>
 
<span class="Main">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>

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

Если, например, класс состоит из нескольких слов, то не обязательно указывать его полностью. Достаточно, чтобы искомое слово (3 параметр) был отделен пробелом от остальных слов в классе.

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута class
Значение проверяемого атрибута row
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span class="row row-first">Поиск HTML тегов</span>
<span class="row row-second">Поиск HTML тегов</span>
<span class="end row">Поиск HTML тегов</span>
<span class="row-row-first">Поиск HTML тегов</span>
<span class="rowrow row-first">Поиск HTML тегов</span>
 
<span class="row row-first">Поиск HTML тегов</span>
<span class="row row-second">Поиск HTML тегов</span>
<span class="end row">Поиск HTML тегов</span>

Находятся все теги, где в классе "row" встречается как отдельное слово.

Если к третьему параметру добавить в начале и/или в конце *, то это будет означать "любые символы до и/или после" соответственно.

Чтобы звездочка сработала внутри значения, надо использовать два символа: точку и звездочку .*

 

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута class
Значение проверяемого атрибута *Main
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span class="Main">Поиск HTML тегов</span>
<span class="NotMain">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>
<span>Поиск HTML тегов</span>
<tr id="Main">Поиск HTML тегов</tr>
 
<span class="Main">Поиск HTML тегов</span>
<span class="NotMain">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>

Находится не только класс Main, но и NotMain, который удовлетворяет условию *Main

Также в 3 параметре могут быть записаны регулярные выражения. Например:

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута class
Значение проверяемого атрибута (First|Second)
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span class="First">Поиск HTML тегов</span>
<span class="Second">Поиск HTML тегов</span>
<div class="First">Поиск HTML тегов</div>
<tr id="First">Поиск HTML тегов</tr>
<span class="Third">Поиск HTML тегов</span>
<li class="Second">Поиск HTML тегов</li>
<div class="Third">Поиск HTML тегов</div>
 
<span class="First">Поиск HTML тегов</span>
<span class="Second">Поиск HTML тегов</span>
<div class="First">Поиск HTML тегов</div>
<li class="Second">Поиск HTML тегов</li>

Здесь ищутся классы First или Second.

В первый параметр Действия также можно записать поиск нескольких тегов при помощи аналогичного формата, например, (span|div) но это редко используется.

Третий параметр может использоваться отдельно (c пустым вторым)

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута  
Значение проверяемого атрибута Main
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span class="Main">Поиск HTML тегов</span>
<span class="NotMain">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>
<span>Поиск HTML тегов</span>
<tr id="Main">Поиск HTML тегов</tr>
 
<span class="Main">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>
<tr id="Main">Поиск HTML тегов</tr>

Обратите внимание, здесь дополнительно получен тег с id Main.
А вот заполненный второй параметр без третьего работать не будет.

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута class
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат
<span class="Main">Поиск HTML тегов</span>
<span class="NotMain">Поиск HTML тегов</span>
<div class="Main">Поиск HTML тегов</div>
<span>Поиск HTML тегов</span>
<tr id="Main">Поиск HTML тегов</tr>
  (пустая строка)

Второй параметр помимо предложенных в выпадающем списке вариантов, так же как и первый может принимать любое значение.

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута data
Значение проверяемого атрибута (First|Second)
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span data="First">Поиск HTML тегов</span>
<span class="Second">Поиск HTML тегов</span>
<div data="First">Поиск HTML тегов</div>
<tr id="First">Поиск HTML тегов</tr>
<span data="Third">Поиск HTML тегов</span>
<li class="Second">Поиск HTML тегов</li>
<div class="Third">Поиск HTML тегов</div>
 
<span data="First">Поиск HTML тегов</span>
<div data="First">Поиск HTML тегов</div>

Также во втором параметре заслуживает внимания спец. значение AttributesPattern. Кратко его можно охарактеризовать как наличие в атрибутах определенной последовательности символов. Например:

Действие Параметр Значение
HTML: Поиск тегов Тип элемента Any Tag
Название проверяемого атрибута AttributesPattern
Значение проверяемого атрибута data
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат (массив)
<span big-data="First">Поиск HTML тегов</span>
<span data-class="Second">Поиск HTML тегов</span>
<div notonlydata="First">Поиск HTML тегов</div>
<tr id="First" id="Second">Поиск HTML тегов</tr>
<span data="Third">Поиск HTML тегов</span>
<li class="data">Поиск HTML тегов</li>
<div class="Third">Поиск HTML тегов</div>
 
<span big-data="First">Поиск HTML тегов</span>
<span data-class="Second">Поиск HTML тегов</span>
<div notonlydata="First">Поиск HTML тегов</div>
<span data="Third">Поиск HTML тегов</span>
<li class="data">Поиск HTML тегов</li>

Здесь находятся все теги, где в атрибутах есть сочетание букв data. Можно было бы задать 3 параметр = "First", тогда нашлось бы всё с таким сочетанием букв в атрибутах.

При наличии в проверяемых атрибутах слов на русском языке Действие может не срабатывать. Попробуйте 2 параметр AttributesPattern

Параметр Тип результата / извлекаемый атрибут

Четвертый параметр имеет нестандартный синтаксис: обязательное первое слово (outerHTML, например), к которому может быть дописано необязательное второе слово или число (join, 5, last, например).

Обязательное первое слово может быть зарезервированным (Тип результата) или произвольным (Извлекаемый атрибут). Зарезервированные слова имеют свои функции, вот они:

  • outerHTML - берет тег целиком
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут outerHTML
Исходное значение   Результат
<div><span><a href="/parser">Парсер</a></span></div>
 
<span><a href="/parser">Парсер</a></span>
  • innerHTML - берет содержимое тега
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут innerHTML
Исходное значение   Результат
<div><span><a href="/parser">Парсер</a></span></div>
 
<a href="/parser">Парсер</a>
  • ConvertToText - преобразует содержимое тега в текст.
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут ConvertToText
Исходное значение   Результат
<div><span><a href="/parser">Парсер</a></span></div>
 
Парсер
  • DeleteTags - удаляет тег
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут DeleteTags
Исходное значение   Результат
<div><span><a href="/parser">Парсер</a></span></div>
 
<div></div>
  • ReplaceTagWithItsText - заменяет тег на содержащийся в нем текст
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут ReplaceTagWithItsText
Исходное значение   Результат
<div><span><a href="/parser">Парсер</a></span></div>
 
<div>Парсер</div>
  • TagHeaderOnly - берет открывающий тег целиком.
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут TagHeaderOnly
Исходное значение   Результат
<div><span class="Data"><a href="/parser">Парсер</a></span></div>
 
<span class="Data">

Все остальные слова относятся к произвольным, они возвращают значение искомого атрибута. Помимо вариантов из выпадающего списка (content, href, src, value, data), могут быть вписаны свои варианты. Например:

Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут big-source-photo
Исходное значение   Результат
<div><span class="Data" id="Link" big-source-photo="/1.jpg"><a href="/parser">Парсер</a></span></div>
 
/1.jpg

К произвольному слову может быть дописано выражение "_with_prefix", которое указывает на то, что к результату надо дописать зарезервированную переменную %WebSiteURL%, попросту говоря, домен сайта, который был загружен в этой же настройке одним из первых действий. Есть возможность выбрать в выпадающем списке готовые варианты href_with_prefix, src_with_prefix. 

Действие Параметр Значение
HTML: Поиск тегов Тип элемента a
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут href_with_prefix
Исходное значение   Результат
<div><span id="Link"><a href="/parser">Парсер</a></span></div>
 
http://excelvba.ru/parser

Выражение "_with_prefix" может быть дописано к любому произвольному слову:

Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут big-source-photo_with_prefix
Исходное значение   Результат
<div><span class="Data" id="Link" big-source-photo="/1.jpg"><a href="/parser">Парсер</a></span></div>
 
http://excelvba.ru/1.jpg

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

  • join - объединяет массив результатов в строку с разделителем равным переводу строки. Обратите внимание, в примере получен не массив значений (тогда бы в скобках стояло "Массив"), а строка.
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут ConvertToText join
Исходное значение   Результат
<span>Парсер 1</span>
<span>Парсер 2</span>
<span>Парсер 3</span>
<span>Парсер 4</span>
 
Парсер 1
Парсер 2
Парсер 3
Парсер 4
  • last - последний найденный элемент массив
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут ConvertToText last
Исходное значение   Результат
<span>Парсер 1</span>
<span>Парсер 2</span>
<span>Парсер 3</span>
<span>Парсер 4</span>
 
Парсер 4
  • last-1 - предпоследний элемент массива, вместо единицы можно указывать любую цифру
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут ConvertToText last-1
Исходное значение   Результат
<span>Парсер 1</span>
<span>Парсер 2</span>
<span>Парсер 3</span>
<span>Парсер 4</span>
 
Парсер 3
  • Если просто указывается число, то берется элемент массива с таким порядковым номером
Действие Параметр Значение
HTML: Поиск тегов Тип элемента span
Название проверяемого атрибута  
Значение проверяемого атрибута  
Тип результата / извлекаемый атрибут ConvertToText 2
Исходное значение   Результат
<span>Парсер 1</span>
<span>Парсер 2</span>
<span>Парсер 3</span>
<span>Парсер 4</span>
 
Парсер 2

Примечания и рекомендации по использованию

  • Если html-код на странице некорректный, например, количество открывающих тегов не равно количеству закрывающих тегов (например, <div> больше, чем </div>), то Действие может работать некорректно. В этом случае можно воспользоваться одним из действий категории "Неиспользуемые", например "# HTML: Поиск тегов по имени класса" или "# HTML: Поиск заданных тегов". Они используют другой алгоритм работы и способны находить "незакрытые" теги. Однако постоянное их использование нежелательно ввиду того, что они потребляют оперативную память, что может привести к проблемам с функционированием программы (впрочем, встречается это крайне редко).
  • Если страница содержит закомментированные куски кода <!-- комментарий -->, то Действие может находить в том числе те теги, которые находятся внутри комментариев и не отображаются на странице. Это может вызвать сложности в определенных случаях. Чтобы этого избежать вы можете использовать предварительно действие "HTML: Удаление тегов / комментов". Однако на большинстве сайтов это не требуется.
  • Если страница очень большая, а одинаковых тегов много, то скорость работы Действия существенно снижается. Зачастую вместо Действия можно воспользоваться текстовой функцией "Взять блоки текста МЕЖДУ ...". Скорость работы существенно возрастет.