Объекты среды выполнения

Объекты

Объекты - это контейнеры для хранения собранных данных.
Diggernaut поддерживает не только плоские структуры данных, но и вложенные, поэтому объекты могут быть вложены в другие объекты.

Основные моменты, которые вы должны знать об объектах:

  1. Объекты служат для сохранения собранных данных
  2. Объекты существуют во всех контекстах и контекстно-независимы
  3. Перед записью полей в объект, его нужно создать
  4. Запись в поля объектов возможна из любого блока внутри блока в котором создан объект
  5. Для корректной работы объекты должны быть сохранены в том же блоке, где они были открыты
  6. Объект может быть сохранен в поле другого объекта или в базу данных

Пример использования простого объекта:

              ---
config:
    debug: 2
    agent: Firefox
do:
- walk:
    to: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
    do:
    # создаем новый объект с именем `item`
    - object_new: item
    - find:
        path: h1
        do:
        - parse
        # записываем значение регистра в поле `title` объекта `item`
        - object_field_set:
            object: item
            field: title
    - find:
        path: p
        do:
        - parse
        # записываем значение регистра в поле `description` объекта `item`
        - object_field_set:
            object: item
            field: description
    # сохраняем объект
    - object_save:
          name: item
              
Время Уровень Сообщение
2017-10-21 03:20:43:412 info Scrape is done
2017-10-21 03:20:42:687 debug Saving object with name: item
2017-10-21 03:20:42:679 debug Saved field description for object item: Пример описания чего-то там.
2017-10-21 03:20:42:671 debug Parsed content: Пример описания чего-то там.
2017-10-21 03:20:42:663 debug Parsing block with arguments: map[]
2017-10-21 03:20:42:654 debug Block content: Пример описания чего-то там.
2017-10-21 03:20:42:647 debug Number of found blocks: 1
2017-10-21 03:20:42:639 debug Looking for: p
2017-10-21 03:20:42:631 debug Saved field title for object item: Заголовок-1
2017-10-21 03:20:42:621 debug Parsed content: Заголовок-1
2017-10-21 03:20:42:614 debug Parsing block with arguments: map[]
2017-10-21 03:20:42:606 debug Block content: Заголовок-1
2017-10-21 03:20:42:598 debug Number of found blocks: 1
2017-10-21 03:20:42:590 debug Looking for: h1
2017-10-21 03:20:42:582 debug Creating object with name: item
2017-10-21 03:20:42:568 debug Page content: <html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>Diggernaut | Мета-язык | Пример объекта</title>
</head>
<body>
<h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
</body>
</html>
2017-10-21 03:20:42:269 info Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-21 03:20:42:263 info Starting scrape
2017-10-21 03:20:42:250 debug Setting up default proxy
2017-10-21 03:20:42:235 debug Setting up surf
2017-10-21 03:20:42:208 info Starting digger: meta-lang-object [1853]
              <!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>Diggernaut | Мета-язык | Пример объекта</title>
</head>
<body>
<h1>Заголовок-1</h1>
<p>Пример описания чего-то там.</p>
</body>
</html>
              
              {
    item : {
        title :  "Заголовок-1",
        description :  "Пример описания чего-то там."
    }
}