Итераторы
Итератор по датам
Итераторы типа date используются в случаях, когда вам нужно создать набор упорядоченных дат, например, если на сайте доноре вы используете форму поиска в которой участвует дата. В итераторе вы можете указать дату начала, интервал в днях между итерациями, период определяющий дату окончания итераций, а также шаблон, описывающий в каком формате вы ходите иметь даты в наборе данных.
Параметр | Описание |
---|---|
type | Константа, определяющая тип итератора, имеет значение date. |
start | Дата начала периода итератора в формате YYYY-MM-DD, если отсутствует, используется текущая дата (опционально). |
end | Дата окончания периода итератора в формате YYYY-MM-DD, если отсутствует, используется период (опционально). |
period | Длительность периода в днях, если отсутствует, устанавливается длительность в 60 дней (опционально). |
interval | Интервал в днях между итерациями, например, если вы хотите получить все даты из периода, вы должны выставить интервал равный 1, если же вам нужны даты раз в неделю, выставьте интервал равный 7. Если интервал не указан явно, будет использоваться значение по умолчанию равное 1 (опционально). |
template | Шаблон, используемый для форматирования значений в полях start_date и end_date наборов данных, сформированных итератором (опционально). |
В таблице ниже, вы можете познакомиться со всеми возможными тегами, которые могут быть использованы в темплейте и примеры их использования:
Тег | Описание | Темплейт | Значение |
---|---|---|---|
%a | аббревиатура дня недели, например Mon или Fri | %a, %d %B | Fri, 20 February |
%A | день недели в полном написании, например Monday или Friday | %A, %d %B | Friday, 20 February |
%b | аббревиатура месяца, например Feb или Sep | %A, %d %b | Friday, 20 Jun |
%B | полное наименование месяца, например February или September | %A, %d %B | Friday, 20 June |
%C | номер столетия, принимает значения от 00 до 99 | %С/%y | 20/17 |
%d | день месяца, принимает значения от 01 до 31 | %Y-%m-%d | 2017-10-01 |
%D | предустановленый темплейт, аналогичен темплейту %m/%d/%y | %D | 05/08/17 |
%e | день месяца, принимает значения от 1 до 31 | %e %B | 5 January |
%F | предустановленый темплейт, аналогичен темплейту %Y-%m-%d | %F | 2017-10-01 |
%g | двухзначный номер года в соответствии со стандартом ISO-8601:1988 | %g | 17 |
%G | четырехзначный номер года в соответствии со стандартом ISO-8601:1988 | %G | 2017 |
%h | то же что и %b% | %A, %d %h | Friday, 20 Jun |
%H | час в 24-часовой системе, принимает значения от 00 до 23 | %H:%M:%S | 08:35:26 |
%I | час в 12-часовой системе, принимает значения от 01 до 12 | %H:%M:%S | 08:35:26 |
%j | порядковый день в году, принимает значения от 1 до 366 | Сегодня %j день в году | Сегодня 183 день в году |
%k | час в 24-часовой системе, принимает значения от 0 до 23 | %k часов %M минут | 8 часов 35 минут |
%l | час в 12-часовой системе, принимает значения от 1 до 12 | %l часов %M минут | 8 часов 35 минут |
%m | порядковый номер месяца, принимает значения от 01 до 12 | %Y-%m-%d | 2017-10-01 |
%l | минуты, принимает значения от 00 до 59 | %l часов %M минут | 8 часов 35 минут |
%n | символ переноса строки | %Y%n%m | 2017\n10 |
%p | значение AM или PM в зависимости от времени, используется при указании времени в 12-часовом формате | %I%p | 8AM |
%P | значение am или pm в зависимости от времени, используется при указании времени в 12-часовом формате | %I%P | 8am |
%r | то же что и %I:%M:%S %p | %r | 04:12:37 PM |
%R | то же что и %H:%M | %R | 22:35 |
%s | временная метка Unix, выражает количество секунд прошедших с начала эпохи (1 января 1970) | %s | 1506867213 |
%S | секунды, принимает значения от 00 до 59 | %H:%M:%S | 08:35:26 |
%t | символ табуляции | %Y%t%m | 2017\t10 |
%T | то же что и %H:%M:%S | %T | 08:35:26 |
%u | порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье) | Сегодня %u день недели | Сегодня 5 день недели |
%U | номер недели в году, в случае когда неделя начинается с вокресенья, принимает значения от 00 до 53 | Шла %U неделя | Шла 23 неделя |
%V | номер недели в году по ISO стандарту, в случае когда неделя начинается с понедельника, принимает значения от 01 до 53. Если в неделе, в которой находится 1 января, содержится 4 и более дней из нового года, эта неделя считается первой неделей нового года, в противном случае - последней неделей прошедшего года. | Шла %V неделя | Шла 23 неделя |
%w | порядковый номер дня недели от 0 (воскресенье) до 6 (суббота) | Сегодня %w день недели | Сегодня 5 день недели |
%W | номер недели в году, в случае когда неделя начинается с понедельника, принимает значения от 00 до 53 | Шла %W неделя | Шла 23 неделя |
%y | Двухзначный порядковый номер года | %m/%d/%y | 10/01/17 |
%Y | Четырехзначный порядковый номер года | %Y-%m-%d | 2017-10-01 |
%z | поправка ко времени относительно времени UTC. Выводится в формате +HHMM или -HHMM, где + означает восточнее GMT, - западнее, HH - количество часов, MM - количество минут. | %z | +0300 |
%Z | аббревиатура временной зоны | %Z | MSK |
%+ | то же что и %a %b %e %H:%M:%S %Z %Y | %+ | Mon Sep 20 13:24:55 MSK 2017 |
%% | символ % | %Y%%%m | 2017%10 |
Если вы не используете шаблон, start_date и end_date будут выведены согласно ISO стандарту. Кроме этих двух аргументов в набор также будут добавлены и другие аргументы, которые могут быть весьма полезны в различных ситуациях:
Аргумент | Описание |
---|---|
start_date | дата начала интервала, в формате заданном темплейтом или согласно ISO стандарту |
end_date | дата конца интервала, в формате заданном темплейтом или согласно ISO стандарту |
start_year | год начала интервала, в формате %Y (YYYY) |
end_year | год конца интервала, в формате %Y (YYYY) |
start_yr | год начала интервала, в формате %y (YY) |
end_yr | год конца интервала, в формате %y (YY) |
start_month | месяц начала интервала, в формате %m (MM) |
end_month | месяц конца интервала, в формате %m (MM) |
Пример итератора по датам:
iterator:
- type: date
# ИНТЕРВАЛ ИТЕРАЦИЙ В 2 ДНЯ
interval: 2
# ПЕРИОД МЕЖДУ ДАТОЙ НАЧАЛА (В ДАННОМ СЛУЧАЕ ТЕКУЩЕЙ ДАТОЙ, ТАК КАК ДАТА НАЧАЛА ОТСУТСВУЕТ) И ОКОНЧАНИЯ 10 ДНЕЙ
period: 10
# ТЕМПЛЕЙТ ДЛЯ АРГУМЕНТОВ `start_date` И `end_date`
template: '%B %d %Y'
В результате получится следующий список наборов полей со значениями, для каждого из которых диггер будет исполнять основной логический блок:
[
{
"start_date": "October 01 2017", "end_date": "October 02 2017",
"start_year": "2017", "end_year": "2017",
"start_yr": "17", "end_yr": "17",
"start_month": "10", "end_month": "10"
},
{
"start_date": "October 03 2017", "end_date": "October 04 2017",
"start_year": "2017", "end_year": "2017",
"start_yr": "17", "end_yr": "17",
"start_month": "10", "end_month": "10"
},
{
"start_date": "October 05 2017", "end_date": "October 06 2017",
"start_year": "2017", "end_year": "2017",
"start_yr": "17", "end_yr": "17",
"start_month": "10", "end_month": "10"
},
{
"start_date": "October 07 2017", "end_date": "October 08 2017",
"start_year": "2017", "end_year": "2017",
"start_yr": "17", "end_yr": "17",
"start_month": "10", "end_month": "10"
},
{
"start_date": "October 09 2017", "end_date": "October 10 2017",
"start_year": "2017", "end_year": "2017",
"start_yr": "17", "end_yr": "17",
"start_month": "10", "end_month": "10"
}
]
Итераторы по датам очень часто используются для организации инкрементального забора данных, что позволяет экономить ресурсы и выполнять задачу быстрее.
Пример использования итератора в диггере:
---
config:
debug: 2
agent: Firefox
iterator:
type: date
start: '2017-10-01'
period: 4
interval: 2
template: '%Y-%m-%d'
do:
- walk:
to: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?from=<%start_date%>&to=<%end_date%>
do:
Время | Уровень | Сообщение |
---|---|---|
2017-10-23 14:23:41:335 | info | Scrape is done |
2017-10-23 14:23:41:321 | debug | Page content: <!DOCTYPE html><html lang="ru"><head> <meta charset="UTF-8"/> <title>Diggernaut | Мета-язык | Пример объекта</title> </head> <body> <h1>Заголовок-1</h1> <p>Пример описания чего-то там.</p> </body></html> |
2017-10-23 14:23:41:166 | debug | Referers: Referer: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?from=2017-10-01&to=2017-10-02 |
2017-10-23 14:23:41:158 | debug | Referer: https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?from=2017-10-01&to=2017-10-02 |
2017-10-23 14:23:41:150 | info | Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?from=2017-10-03&to=2017-10-04 |
2017-10-23 14:23:41:138 | debug | Page content: <!DOCTYPE html><html lang="ru"><head> <meta charset="UTF-8"/> <title>Diggernaut | Мета-язык | Пример объекта</title> </head> <body> <h1>Заголовок-1</h1> <p>Пример описания чего-то там.</p> </body></html> |
2017-10-23 14:23:40:185 | info | Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-object-ru.html?from=2017-10-01&to=2017-10-02 |
2017-10-23 14:23:40:178 | info | Starting scrape |
2017-10-23 14:23:40:166 | debug | Setting up default proxy |
2017-10-23 14:23:40:153 | debug | Setting up surf |
2017-10-23 14:23:40:125 | info | Starting digger: meta-lang-iterator [1859] |
Далее мы рассмотрим итераторы типа csv.