Перейти к основному содержимому

Форматирование запросов

Формат запроса - позволяет добавлять подстановки и форматировать запрос к нужному виду используя шаблоны, применяется для каждого запроса.

Форматы запросов

Пример форматов запросов
  1. Формат запроса для 1-го парсера
  2. Формат запроса для 2-го парсера
  3. Общий формат запросов

Существует 2 способа указать шаблон:

  • Общий формат запросов, он обрабатывается первым и поддерживает подстановки
  • Формат запроса для каждого парсера - позволяет задать специфичный формат для отдельных парсеров

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

google.com  
a-parser.com
yandex.ru

Общий формат запроса задан в виде:

http://$query

Перед каждым исходным запросом (доменом) будет подставлена строка http://, запрос будет преобразован google.com -> http://google.com

Формат запроса для 1-го парсера остался неизменным, он будет парсить запрос http://google.com

Формат запроса для 2-го парсера выглядит следующим образом:

site:$query

Запрос для данного парсера будет преобразован: http://google.com -> site:http://google.com

Шаблоны в запросах

В формате запроса полноценно поддерживается шаблонизатор Template Toolkit, в качестве переменных доступны:

  • $query - запрос после форматирования через общий формат результата
  • $query.num - порядковый номер запроса
  • $query.lvl - уровень вложенности запроса при использовании опций Parse to level или Parse all results
  • $query.orig - исходный запрос до форматирования
  • $query.first - первый запрос при использовании опций Parse to level или Parse all results
  • $query.prev - показывает запрос который был на предыдущем уровне, работает для HTML::LinkExtractorHTML::LinkExtractor, $tools.query.add и JS парсеров this.query.add
  • Все переменные, созданные через Конструктор запросов

Макросы подстановок

Общий формат запроса поддерживает следующие макросы:

МакросОписаниеПримеры
{az:START:END}Подстановка цифро-символьной последовательности. Вместо START указывается начало последовательности, вместо END - конец. Длина END должна быть больше или равна длине START. Символы в конце последовательности END должны быть после (в алфавитном порядке) символов в начале последовательности START. Можно использовать любые UTF-8 последовательности символов{az:a:z} - подстановка всех символов от a до z (a, b, c, ..., x, z). {az:aaa:zzz} - подстановка всех символов от aaa до zzz (aaa, aab, aac, ..., zzx, zzz). {az:a:zz} - подстановка всех символов от a до zz (a, b, c, ... aa, ab, ..., zx, zz). {az:00:99} - подстановка всех чисел от 00 до 99 (00, 01, 02, ..., 98, 99). {az:а:яяя} - подстановка всех кирилических символов от а до яяя (а, б, ... аа, аб, ... яяю, яяя)
{each:WORD1,WORD2,...}Подстановка указанных слов WORD1, WORD2 и т.д., длина не ограничена{each:green,blue,red,black} - подстановка слов green, blue, red, black. {each:,buy,sell} - подстановка пустого слова, затем buy и sell
{subs:NAME}Подстановка дополнительных слов из файлов в папке queries/subs/. Вместо NAME необходимо указать имя файла, без расширения .txt{subs:zones} - подстановка всех строк из файла queries/subs/zones.txt
{num:START:END}Макрос перебирает числа в указанном диапазоне. Вместо START указывается начало интервала, вместо END - конец. Поддерживаются дробные числа.{num:1:1000} - подстановка всех чисел от 1 до 1000 (1, 2, 3 ..., 999, 1000)
{num:START:END:STEP}Макрос перебирает числа в указанном диапазоне, с указанным шагом. Вместо START указывается начало интервала, вместо END - конец, вместо STEP - шаг. Поддерживаются дробные числа.{num:0:1000:10} - подстановка всех чисел от 0 до 1000 с шагом 10 (0, 10, 20 ..., 990, 1000)
{num:END:START}Макрос перебирает числа в указанном диапазоне в обратном порядке. Вместо END - указывается конец интервала, START указывает начало интервала. Поддерживаются дробные числа.{num:1000:1} - подстановка всех чисел от 1000 до 1 (1000,999, 998, ..., 2, 1)
{num:END:START:STEP}Макрос перебирает числа в указанном диапазоне в обратном порядке, с указанным шагом. Вместо END - указывается конец интервала, START указывает начало интервала, вместо STEP - шаг. Поддерживаются дробные числа.{num:1000:1:10} - подстановка всех чисел от 1000 до 1 с шагом 10 (1000,990, 980, ..., 10, 1)

⏩ Видео: Макросы подстановок

В этом видео рассмотрено:

  • макрос {num} на примерах прохода по страницам и перебора координат в парсере Maps::GoogleMaps::Google
  • макрос {az} на примере парсинга с inurl: для увеличения кол-ва запросов и соответственно результатов
  • макрос {each} на примере парсинга подсказок для генерации словосочетаний

Комбинирование макросов подстановок

Макросы подстановок можно комбинировать. Комплексный пример:

$query site:{subs:zones} {az:aa:zz}

Предположим один из запросов на парсинг был viagra, а в файле queries/subs/zones.txt находится следующий список зон: com, net, org, тогда на парсинг поступит следующий набор комбинаций:

viagra site:com ab  
...
viagra site:net jj
...
viagra site:eek.rg zz

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

1 запрос (viagra) x 3 зоны ({subs:zones}) x 676 символьных вариаций ({az:aa:zz}) = 2028 запросов