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

Пул ссылок

Пул ссылок - это список, содержащий в себе URL адреса.
Он может использоваться как, например, для формирования списка со страницами каталога и дальнейшей итерации по этому списку. Или, используя тот факт, что все URL в листе могут быть только уникальными, очень удобно собирать URL на страницы товаров в единый пул со всех страниц каталога, а затем итерируя по пулу, собрать все товары. Это позволит избежать дубликатов товаров, потому что в большинстве магазинов один и тот же товар может находиться в разных категориях. Это экономит ваши ресурсы, делает ваш набор данных более чистым и уменьшает нагрузку на сайт донор.

Пять важнейших моментов о пулах ссылок:

  1. Команда для добавления URL в пул может принимать значение регистра, строковое знаение, или составное с аргументами или переменными
  2. Пулы существуют во всех контекстах, контекстно-независимы и могут быть использованы в любом контексте
  3. Может существовать бесконечное множество пулов
  4. URL`ы добавляемые в пул будут автоматически нормализованы
  5. Все значения (URL`ы) в пуле уникальны, поэтому в списке не может находиться два одинаковых адреса

Пример формирования пула ссылок:

              ---
config:
    debug: 2
    agent: Firefox
do:
- walk:
    to: https://www.diggernaut.com/sandbox/meta-lang-pool-ru.html
    do:
    - find:
        path: body > a
        do:
        - parse:
            attr: href
        - normalize:
            routine: url
        - link_add:
            pool: main
              
              <!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>Diggernaut | Мета-язык | Пример использования пула ссылок</title>
</head>
<body>
<a href="https://www.diggernaut.com/sandbox/table-nested-data-ru.html">Ссылка N1</a>
<br/>
<a href="https://www.diggernaut.com/sandbox/meta-lang-object-ru.html">Ссылка N2</a>
<br/>
<a href="https://www.diggernaut.com/sandbox/meta-lang-register-ru.html">Ссылка N3</a>
</body>
</html>
              
Время Уровень Сообщение
2017-10-22 00:02:56:111 info Scrape is done
2017-10-22 00:02:56:104 debug Link added
2017-10-22 00:02:56:097 debug Adding link to the pool main: https://www.diggernaut.com/sandbox/meta-lang-register-ru.html
2017-10-22 00:02:56:089 debug Results: https://www.diggernaut.com/sandbox/meta-lang-register-ru.html
2017-10-22 00:02:56:082 debug Applying normalization: url
2017-10-22 00:02:56:074 debug Parsed content: https://www.diggernaut.com/sandbox/meta-lang-register-ru.html
2017-10-22 00:02:56:067 debug Parsing attribute: href
2017-10-22 00:02:56:060 debug Parsing block with arguments: map[attr:href]
2017-10-22 00:02:56:053 debug Block content: Ссылка N3
2017-10-22 00:02:56:045 debug Link added
2017-10-22 00:02:56:038 debug Adding link to the pool main: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-22 00:02:56:028 debug Results: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-22 00:02:56:018 debug Applying normalization: url
2017-10-22 00:02:56:010 debug Parsed content: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html
2017-10-22 00:02:56:002 debug Parsing attribute: href
2017-10-22 00:02:55:994 debug Parsing block with arguments: map[attr:href]
2017-10-22 00:02:55:987 debug Block content: Ссылка N2
2017-10-22 00:02:55:979 debug Link added
2017-10-22 00:02:55:972 debug Adding link to the pool main: https://www.diggernaut.com/sandbox/table-nested-data-ru.html
2017-10-22 00:02:55:965 debug Results: https://www.diggernaut.com/sandbox/table-nested-data-ru.html
2017-10-22 00:02:55:957 debug Applying normalization: url
2017-10-22 00:02:55:949 debug Parsed content: https://www.diggernaut.com/sandbox/table-nested-data-ru.html
2017-10-22 00:02:55:941 debug Parsing attribute: href
2017-10-22 00:02:55:933 debug Parsing block with arguments: map[attr:href]
2017-10-22 00:02:55:925 debug Block content: Ссылка N1
2017-10-22 00:02:55:917 debug Number of found blocks: 3
2017-10-22 00:02:55:910 debug Looking for: body > a
2017-10-22 00:02:55:898 debug Page content: <html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>Diggernaut | Мета-язык | Пример использования пула ссылок</title>
</head>
<body>
<a href="https://www.diggernaut.com/sandbox/table-nested-data-ru.html">Ссылка N1</a>
<br/>
<a href="https://www.diggernaut.com/sandbox/meta-lang-object-ru.html">Ссылка N2</a>
<br/>
<a href="https://www.diggernaut.com/sandbox/meta-lang-register-ru.html">Ссылка N3</a>
</body>
</html>
2017-10-22 00:02:55:642 info Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-pool-ru.html
2017-10-22 00:02:55:635 info Starting scrape
2017-10-22 00:02:55:621 debug Setting up default proxy
2017-10-22 00:02:55:608 debug Setting up surf
2017-10-22 00:02:55:581 info Starting digger: meta-lang-pool [1855]