Работаем с DOM структурой
Разделение блока
В ряде случаев вам может понадобиться разделить содержимое блока на несколько блоков, чтобы в дальнейшем пройти в каждый из таких блоков и распарсить содержимое. Например, какие-то параметры забираемого объекта могут быть перечислены через запятую в определенном блоке, или же разделены тегом <br>. В этом случае вам поможет команда split. Она может работать в двух контекстах: текстовом и HTML. В текстовом контексте она работает с содержимым всех текстовых нод текущего блока, а в HTML контексте - с HTML содержимым текущего блока. Результатом работы команды будет новый блок, в контекст которого автоматически перейдет диггер.
В команде используются следующие параметры:
Параметр | Описание |
---|---|
context | Задает значение контекста, в котором будет работать команда: text или html. |
delimiter | Разделитель, который будет использован для разделения содержимого на блоки. |
В качестве примера возьмем HTML код:
<div>
<p>Some text</p>
<br/>
<p>Some,other,text with
comma
and
newline</p>
</div>
Примеры использования команды:
- find:
path: div > p:contains(",")
do:
- split:
context: text
delimiter: ","
# В ДАННЫЙ МОМЕНТ МЫ ПЕРЕЙДЕМ В НОВЫЙ БЛОК
# СОЗДАННЫЙ КОМАНДОЙ `split` С HTML СОДЕРЖИМЫМ:
# <div class="splitted element_0">Some</div>
# <div class="splitted element_1">other</div>
# <div class="splitted element_2">text with comma and newline</div>
# ВЫПОЛНИМ ПОИСК И НАЙДЕМ ПОСЛЕДНИЙ ЭЛЕМЕНТ
- find:
path: .splitted
slice: -1
do:
- parse
# РЕГИСТР СОДЕРЖИТ: text with comma and newline
- find:
path: div
do:
- split:
context: html
delimiter: <br/>
# В ДАННЫЙ МОМЕНТ МЫ ПЕРЕЙДЕМ В НОВЫЙ БЛОК
# СОЗДАННЫЙ КОМАНДОЙ `split` С HTML СОДЕРЖИМЫМ:
# <div class="splitted element_0"><p>Some text</p></div>
# <div class="splitted element_1"><p>Some,other,text with comma and newline</p></div>
# ВЫПОЛНИМ ПОИСК И НАЙДЕМ ПОСЛЕДНИЙ ЭЛЕМЕНТ
- find:
path: .splitted
slice: -1
do:
- parse
# РЕГИСТР СОДЕРЖИТ: Some,other,text with comma and newline
В следующей главе мы узнаем как разбивать содержимое блока на блоки, используя последовательности.