TAGname ,
TAGname[nn] ,
tag= ,
tag[n]= ,
tag[-n]=
Позволяют указать название тега, как условие для соблюдения правила.
TAGname позволяет указать название тега без вводного tag= .
Два примера с эквивалентными правилами, в которых проверяется, что контейнер является тегом <nav> :
tag=NAV==псевдоним
NAV ==псевдоним
Основные моменты:
- Используйте просто
TAGname в любом регистре для любых стандартных тегов (есть встроенная проверка валидности). Если это AMP-тег или любой другой самописный, используйте tag= он поддерживает любое название тега состоящее из A-Z a-z и - (цифры не поддерживаются);
- Слово
tag не зависит от регистра букв, все пробелы игнорируются, что удобно для выравнивания;
- Группа условий
tag= единственная, где также и в значении игнорируется пробелы по краям, а также регистр (который игнорируется ещё только в значении условия TEXT= );
- Простое условие
tag и TAGname — самые быстрые. Если указать редкий тег и поместить его в начало строки правил, такое правило практически не будет замедлять обход DOM-дерева.
TAGname[n] позволяет указать порядковый номер среди тегов именно этого вида. Отчет идет с 1.
tag[n]= и tag[-n]= позволяют указать порядковый номер тега внутри текущего уровня вложенности DOM-дерева в числе всех прочих тегов (вложенные в теги теги не считаем).
Пример, на котором правило сработает, только если первый тег — это слой <div> :
tag[1]=div==псевдоним
▼
Основные моменты:
- Отсчет идет с 1, а отрицательные значения с -1 — это порядковый номер тега с конца;
- Если в активных правилах есть прямая и обратная последовательность, лучше выбрать прямую или обратную для всех, так будет чуть быстрее;
[n] и [-n] работает только в сочетании с условием tag или TAGname ;
Условие TAGname[n] медленнее tag[n]= и немного замедлит парсинг.
| id= , class=Позволяет проверить, содержит ли тег, который в данный момент проверяется парсером при обходе DOM-дерева, указанный id или, соответственно, class .
Пример: id=x==псевдоним
Основные моменты:
- Значение зависит от регистра букв;
- Значение может быть в кавычках;
- Очень быстро обрабатываются;
- По возможности лучше указывать id, так как по стандартам он должен быть уникальным в документе.
| Разделители условий (; , / , // )
|
---|
;Позволяет указать ещё одно уточняющее условие для данного тега. Пример: A;@href=*dog*==про собак Для улучшения производительности, сначала указывайте наиболее редкое и не ресурсоёмкое правило.
| /Указание искать последующие условия в каждом теге следующего (дочернего) уровня вложенности DOM-дерева. Если необходимо создать абсолютный путь от начального тега DOM-дерева, то им является HTML , хотя лучше от следующего за ним уникального BODY .
Пример, в котором мы получим текстовое содержимое первого слоя <div> в документе на первом уровне вложенности: body/div[0]==псевдоним слоя
Если необходимо опуститься на два уровня вниз, нужно сочетать / с каким-либо условием.
| //Указание для поиска вторичного условия на любом дочернем уровне вложенности DOM-дерева. Ресурсоемкость зависит от количества вложенных уровней и кратна / . Следует минимизировать ситуации, при которых срабатывает условие перед этим // , т.е. максимально защитить его от бесполезных срабатываний любым не ресурсоёмким условием.
Пример, с помощью которого будет осуществлен поиск любых выделенных жирным шрифтом слов внутри ячеек таблицы: td//b==выделенное жирным слово
Допускается использовать в начале строки //* с целью унификации с путями в языке XPath, в котором такое правило указывает на относительный путь. В DJpath все пути относительные и этот фрагмент просто игнорируется.
| Условия, которые могут быть ТОЛЬКО ПОСЛЕДУЮЩИМИ в строке правила (@атрибут_тега , TEXT , $стиль , LINKto , отрицание =! )
|
---|
@атрибут_тегаПроверяет наличие в указанном атрибуте искомого значения.
Например, проверим наличие у изображения подписи котёнок: img;@alt=котёнок==картинка с котёнком
Основные моменты:
- Регистр букв в значении и пробелы (в том числе по краям) учитываются;
- Значение может быть в кавычках;
@class= и @id= являются аналогами (для совместимости с XPath путями) class= и id= , поэтому могут быть в первом правиле. Кроме того @атрибут="" может быть обрамлен квадратными скобками [@атрибут=""] , которые не оказывают никакого влияния и также служат для совместимости с XPath путями из DevTools (поддерживаются пути Xpath только из DevTools, полный синтаксиc недопустим).
| TEXT=Условие позволяет проверить контейнер на наличие текста из всех его потоков методом textContent.
Например: h1;TEXT=**распродажа новых**==псевдоним
▼
Основные моменты:
- Значение не зависит от регистра, пробелы по краям значения учитываются;
- Условие ресурсоёмко: следует брать максимально глубокие блоки с как можно меньшим количеством слов, а само условие ставить после более производительных условий, которые отсеят лишние условия;
- Слова по краям вложенных контейнеров склеиваются, если там нет пробелов;
"*~| недопустимы как часть пользовательского значения;
- Недопустимы как часть пользовательского значения без обрамления в двойные кавычки (
="…" или =!"…" ):
=;/^] и ! (если он первый в пользовательском фрагменте). Используйте * и ** для их замены.
| и звездочки в середине фрагмента являются более ресурсоёмкими, однако после первой такой звездочки в середине, последующие внутри этого значения замедлят не так сильно.
| $стиль
Открывает доступ к методу getComputedStyle() , который позволяет проверить, имеет ли контейнер один из более чем 350-ти возможных вычисленных браузером стилей, таких как размеры, цвет текса или фона и тому подобное.
В следующем примере проверяется, имеет ли текст внутри слоя <div> установленную высоту в 17 пикселей tag=div;$font-size=17px==псевдоним
Допускается не только точное соответствие = , но и операторы сравнения width=>100 (равно или больше ста (цифра для примера)) и width=<100 (равно или меньше ста, а также если не удалось получить число из значения). Во всех этих случаях будет осуществлена попытка преобразования значения из браузера в число, а % , px и прочее из кода отброшено по правилам метода parseInt() , поэтому в указанном значении должны быть только числа.
▼
Основные моменты:
- Условие не может быть первым в строке;
- Значение чувствительно к регистру и пробелам, однако пробелы по краям значения игнорируются;
- При использовании оператора сравнения
= обязательно точное соответствие (включая единицы измерения), а при => и =< в значении должна быть цифра;
- Нельзя помещать значения в кавычки, если оно не указанно в кавычках (редкий случай) в панели DevTools (это единственное вид условия, где можно использовать кавычки в пользовательском значении);
- В несколько раз более ресурсоёмкое, чем другие условия, при этом дополнительные условия
$ для именно текущего исследуемого тега работают очень быстро;
- Для стабильного вычисления размеров и стилей необходимо указать на странице настроек адекватное Ожидание AJAX-запросов, асинхронных скриптов и refresh редиректов;
- Посмотреть вычисленные стили можно в панели DevTools на вкладке Computed, выделив элемент страницы инструментом наведения из левого верхнего угла панели;
- Всегда следует смотреть, какое значение стиля отображает панель DevTools, ввиду того, что очевидное
width>0 может не сработать, так как по факту размер может быть вычислен как width=auto ;
- Размеры в панели DevTools следует смотреть только после настройки ширины окна, с которой будет производиться парсинг и которую можно посмотреть в настройках LinksTamed. Подстроить размер видимой зоны можно при активизации DevTools по всплывающей в верхнем правом углу браузера подсказке, которая активизируется при изменении вами размеров окна. Уменьшить окно получится только до размеров не мобильного бота. Важно понимать, что в стиле записаны не текущие размеры, а вычисленный из различных условий стиль, который может меняться скриптами и такими условиями в CSS как, например,
@media .
| LINKto=псевдоним
Ссылка, позволяющая проверить, сработало другое правило с псевдонимом, указанным в значении LINKto= в ссылающемся на него правиле.
Детали данного описания связанны с методами извлечения и остановки, описанными ниже в таблице
Пример, в котором мы используем первое правило, как ссылку, при этом даём указание не добавлять поля псевдонима в выгрузку и закончить поиск этих правил после первого совпадения (# ):
tag =h1; text=**ноутбук **==NOTadd ==карточка_с_ноутбуком
class=artikul;linkto=карточка_с_ноутбуком==#==артикул
▼
Основные моменты:
- LINKto — единственный способ задать диапазон — указываем начальный блок (
LINKto=псевдоним1 ) и конечный (LINKto=!псевдоним2 ), после прохождения которого правило не сможет сработать. Также остановить выполнение исследования можно с помощью последующих правил c ## , в том числе и с ##NOTadd (остановить, но не добавлять), при этом при разметке ссылок никакие методы остановки не сработают для контейнера с ссылкам, который уже подпал под правило, т.е. если правило сработало, его не отменить, все ссылки в нем будут размечены;
- Условие не может быть первым в строке правила;
- Парсер обходит DOM-дерево сверху вниз один раз, поэтому правило с псевдонимом в
LINKto= уже должно быть обработано (быть выше по коду), то есть последнее условие правила по ссылке должно быть выше в DOM-дереве тега, где будет проверяться LINKto= на него. Если LINKto= будет в том же месте, где сработало правило на которое он ссылается, работает сложная система приоритетов, описанная в подразделе Отдельные моменты при разметке ссылок;
- Псевдоним в самом правиле из
LINKto= должен быть уникальным в текстовом поле или быть ==[группой] ;
- Если правило, которое служит ссылкой, не должно приводить к записи значения, следует указать ему вместо
== метод ==NOTadd== . ==##NOTadd== служит для остановки исследования правил при обходе парсером DOM-дерева;
- Можно сослаться на любой псевдоним, в правиле которого нет
## ;
- Использовать общий
[url=…] только в правиле c псевдонимом из LINKto= , чтобы не упоминать url в каждом правиле, не лучшая идея, так как правила с LINKto попадут на страницу и будут отрабатываться, пока не наткнутся на LINKto= , а не будут удалены при компиляции (перед добавлением), как если бы сами имели собственный [url=…] .
| =!
Оператор сравнения (вместо простого = ), сработает, если условие не отвечает значению.
Пример, в котором записывается анкор ссылки без указанного параметра в самой ссылке (обратите внимание, что подстановочная пара символа ** в середине примера заменяет недоступный в значении = ):
tag=a;@href=!**get_param**value**==анкор_ссылки_без_параметра
Описание звёздочек читайте ниже в таблице в разделе Подстановочные знаки.
▼
Основные моменты:
- Работает для всех типов условий, кроме
=> и =< в $стиль ;
=! не может быть первым условием в строке правила (кроме =!* ) из-за рисков снижения производительности;
=! не может быть первым символом в значении пользователя, заменяем его на * , ** или ="!… " ;
- При использовании оператора
| может быть только после = , т.е. не найден первый и второй вариант (в комбинации |! восклицательный знак сработает как обычный символ);
- Если отрицание сработало — то, чтобы проверить, что атрибут вообще существует, используйте значение
=* (точно) — это значит, что атрибут существует с или без значения, а =** (точно) — что еще и не пустое (работают только для ID= , CLASS= , @атрибут_тега= );
- Всегда сочетайте
=! с утвердительными правилами для избежания замедления обработки и попадания в результаты большого количества ошибочных данных.
| Подстановочные знаки
|
---|
* и *** вместо одного и более символов в условии class= , id= , @ , text= , [url=] означает, что вместо * должно быть ноль и более символов, т.е. может быть или не быть.
** вместо части символов в значении означает, что вместо них должен быть один и более символов.
Например: img;@alt=собака и**==@href==адрес картинки с собакой и другим
Помимо обычных комбинаций с текстом могут быть значения, которые состоят только из звёздочек и полезны в сочетании с различными =! :
=* (точно) атрибут существует, включая data="", data= или просто data;
=** (точно) или =!"" означает любое не пустое значение (не нулевая длина);
="" (точно) означает любое пустое значение (data="", data= или просто data);
=!* (точно) проверка, что указанного атрибута нет в данном теге вообще.
▼
Важные моменты:
"*~| недопустимы как часть пользовательского значения, следует заменять их на * или ** ;
- Недопустимы как часть пользовательского значения без обрамления в двойные кавычки (
="…" или =!"…" ):
=;/^] и ! (если он первый в пользовательском фрагменте). Используйте * и ** для их замены.
- В
TEXT= используйте звёздочки для участков с переносом строк и границ контейнеров без пробелов.
- Только такие сочетания могут быть первыми в строке правила:
=* , =!* , *x , x* , **x , x** (одно условие с краю);
- В первом условии строки, если для условия этого типа все значения без звёздочек или имеют одну длину и положение звездочки, то они обрабатываются быстрее, так как им не нужно по разному обрезать строку.
| |Означает «или», то есть условие отвечает одному из вариантов значения. Доступно только внутри значения (после = ).
Пример использования: id=tag;class=class1|class2==class1 или class2
В случае, если используется отрицание =! в сочетании с | внутри значения значит «и», то есть оба варианта должны не соответствовать, таким образом |! — просто восклицательный знак — отрицание может быть только после = .
| Специальные условия
|
---|
[url=…]
Позволяет не добавлять правила на страницы, URL-адрес которых не подпадает под условие.
Например:[url=**botinki**|**tufli;url=!**sandali**]
▼
Основные моменты:
- Может содержать
* , ** , | («или»), а также еще одно условие ;url= ,то есть «или» (удобно для отрицаний);
url=! в сочетании с | внутри значения значит «и», т.е. оба варианта должны не соответствовать;
- Значение после
[url= должно начинаться с * , ** или http , а также отрицания;
- Может быть в любом месте строки и будет вырезано как будто его не было, не нужно отделять его
/ , // или ; ;
- Значительно ускорит время обработки за счет отключения многосоставных правил, а если правило состоит только из первого условия, ускорит, если не останется активных правил такого вида вообще или хотя бы с таким же положением звездочки для этого вида, в целом, для односоставных правил стоит использовать
[url=… только для снижения вероятности ложного срабатывания правил на ненужных страницах.
| == ,==псевдоним ,==[псевдоним] | После всех условий и методов == позволяет указать псевдоним, которым будет назван столбец для изымаемых данных или же создана отметка для ссылки (в зависимости от того, в каком из двух текстовых полей вводится правило).
Важные моменты:
- Псевдоним не может содержать
; и " ;
- Даже одинаковые псевдонимы из разных правил записываются в разные столбцы (см. далее, как избежать).
[псевдоним] , обрамленный квадратными скобками […] , позволяет объединить одинаковые псевдонимы в единую группу, которые будут записываться в один столбик
Важные моменты:
- Групповой псевдоним из текстовых полей веб-скрейпинга и разметки ссылок будет раздельным;
- При разметке ссылок групповой псевдоним не имеет смысла, кроме как для
LINKto , так как одинаковое сочетание отметок для каждой ссылки объединяется в одну.
| Методы извлечения и остановки (внутри ==…== )
|
---|
==…==== может быть двойным с ==блоком методов==псевдоним , где перечислены особые указания для изъятия данных и остановки парсинга данных, которые перечислены ниже в данном разделе таблицы.
В текстовом поле разметки ссылок поддерживаются только == , ==#== , ==##== , ==NOTadd== , ==#NOTadd== , ==##NOTadd== , ==ignore== , ==#ignore== , ==nottext== , ==#nottext== , остальное касается только скрейпинга
| ==innerText== или просто
== (по умолчанию)
| Указание использовать свойство innerText в качестве метода получения контента. Значение будет получено, как если бы пользователь выделил и скопировал этот участок текста. Идеально подходит для многостраничных значений: скрытый с помощью display:none контент, а также содержимое тегов <script> и <style> игнорируется, однако содержимое owerflow:hidden будет скопировано, т.к. на самом деле остается в макете страницы. Блочные теги создают переносы строк, сохраняя абзацы;
| ==textContent==
Чуть более производительный метод textContent для простых значений без переносов строк. Содержит весь текст скрытых слоев и текст таких тегов как <script> и <style> . Блочные элементы не переносят строк и не создают пробелов — слова без пробелов между блоками будут склеены (TEXT= использует такой же метод).
| ==innerHTML== и
==outerHTML==
==innerHTML== позволит получить HTML-код внутри контейнера с переносами строк.
==outerHTML== позволит получить HTML-код, включая сам контейнер, например, не только анкор, но и саму ссылку. Аналог ==^innerHTML== (о ^ ниже в таблице).
▼
Важные моменты для восстановления фрагментов HTML-кода:
- Все двойные кавычки
" в полученных данных будут удвоены ("" ) и при открытии в Excel, OpenOffice и тому подобном софте будут отображаться нормально. Таково требование экранирования символов в формате .CSV. При этом, при копировании в буфер обмена, значения снова будут содержать пары двойных кавычек;
- При распарсинге следует учитывать, что значения, содержащие переносы строк, уже удвоенные двойные кавычки
"" и ; , а также значения, которые были найдены, но оказались пустыми и не содержат символов, будут обрамлены в двойные кавычки.
| группа указаний
nodeValueПозволяет получить текстовые узлы первого уровня вложенности (без содержимого вложенных контейнеров):
==nodeValue== получить все текстовые узлы первого уровня, т.е не вложенные в теги (каждый текстовый узел будет отделен <,> );
==nodeValueFIRST== и ==nodeValueLAST== — получить только первый или, соответственно, последний текстовый узел контейнера.
| @атрибут_тегаУказывает получить значение указанного атрибута элемента. Регистр букв названия игнорируется. При получении значения, если оно ссылка, будет получено начальное значение, т.е. путь не будет приведен к абсолютному, если в HTML-коде указан как относительный (без домена).
| @@@DISC и
@@@DISC[…,…]Позволяет сохранять изображения и другие файлы на жесткий диск. Работает автоматически с тегом IMG , где берет ссылку в атрибуте SRC или в атрибуте HREF тега А . Во втором случае возможно закачать и другие файлы (включая статические версии HTML-файлов), но в этом случае нет гарантии беспроблемного парсинга:
Диалоговые окна «Сохранить как»: вероятность появления и предотвращение его появления
- Перед первым использованием метода в браузере, необходимо убедиться, что в настройках этого браузера в разделе Настройки>Дополнительно>Скачанные файлы отключена опция «Всегда указывать место для скачивания», иначе для каждого сохраненного файла будет открываться диалоговое окно для указания места сохранения;
- В браузере есть понятие «небезопасные файлы», попытка их загрузки приведет к блокировке загрузки или появлению диалогового окна сохранения для каждой такой загрузки. К ним, если верить заявлениям, может относиться в будущем изображение в формате PNG. В среднесрочной перспективе не гарантируется получение файлов без диалогового окна (без более глубоких настроек безопасности браузера) по незащищенному протоколу http:// и со смешанным содержимым (страница https://, файл на http://). Подробнее об ограничениях читайте в блоге разработчиков Chromium. Разрешить загрузку блокируемых и небезопасных файлов можно перенастройкой опций безопасности браузера (информацию об этом и о рисках ищите в поисковых системах). В любом случае, сначала стоит попоробывать сделать парсинг, так как есть большая вероятность, что проблема этого типа вас не коснется, особенно если вы качаете изображения;
- В случае появления диалоговых окон, будет открыто окон, равное по количеству потокам в настройках (иногда пользователь может щелкнуть по вкладке в момент появления такого окна, и оно будет скрыто на заднем плане). В случае приостановки парсинга, а также остановки или изменения настроек для их подавления, нужно прокликать количество равное потокам. Если нажать на отмену, файл будет добавлен в очередь снова указанное на странице настроек количество переобходов при ошибках;
- При загрузке файлов, которые представляют из себя HTML-страницы, могут возникнуть не ситуации с невыявленной закономерностью, когда для файла не будет правильно выбрана папка и содержимое будет загружено в папку последнего файла не в виде документа, что является багом браузера.
Файлы сохраняются в папке Загрузки(Downloads)/LinksTamed/WebScraping/домен_проекта*/псевдоним /_NOT_GOOD_**/протокол_и_домен_файла/путь/имя
Примечания:
*домен_проекта при мультидоменном краулинге по строгому списку всегда один - 1-го адреса в списке.
**/_NOT_GOOD_/ — эта подпапка появится, если на странице есть любая каноническая рекомендация canonical не на себя (работоспособность не проверяется на момент скачивания) или noindex без nofollow . Контент страницы с noindex, nofollow (none ) или Disallow не обрабатывается вообще на данный момент, следуя правилам для поисковых ботов. Clean-param обрабатывается после парсинга и не может быть учтен. В выгрузке скрейпинга все эти директивы и рекомендации будут отмечены уже в обработанном виде и некоторые могут отсутствовать из-за того, что признаны ошибочными (при этом останутся в _NOT_GOOD_). Разделение необходимо, чтобы не засорять результаты поиска похожих изображений в стороннем софте. Содержимое /_NOT_GOOD_/ может быть объединено с файлами основного пути простым перемещением содержимого.
Для возможности сохранения в различных файловых системах, перечисленные далее символы будут закодированы по следующим правилам:
Следующие символы и их последовательности, которые недопустимы в файловой системе и не были закодированы самим браузером, будут заменены на HTML-мнемоники:
| Исходный символ | HTML-мнемоник
|
---|
??
**
::
||
://://
/ в конце URL | /
// (2 и более) после домена | //(новая папка)
| | | | | | | | | | | |
- Имена и каталоги, длина которых с мнемониками превышает 127 символов, будут обрезаны до 126 символов с многоточием (…) в конце (HTML-мнемоник в конце также может быть частично обрезан).
Адрес также будет добавлен в выгрузку скрейпинга в столбец с соответствующим псевдонимом, при этом будет указан абсолютный путь (т.е. будет включать протокол и домен), даже если в исходном коде он был относительным. Длина ссылки учитывается при расчете длин извлеченных значений в таблице наблюдения за ходом скрейпинга, так что не удивляйтесь значениям. В выгрузке можно посмотреть к каким страницам относятся загруженные файлы (эти файлы не отображаются в общей статистике, но в случае невозможности сохранения — будут отмечены в аудите, но не более 2000 ошибок).
Картинки будут растасованы в папки по псевдонимам. Таким образом, можно искать с помощью стороннего софта похожие изображения в одном месте шаблона (за счет того, что результаты не будут засорены превьюшками из каталогов и картинками в ссылках Cross-sell (Кросс-сейл) и Up-sell (аппсейл) в карточках на другие товары). Найти изображения с одинаковым адресом на разных страницах можно с помощью стандартных функций Excel.
▼
Важные моменты:
- Файлы с закрытых от индексации страниц (robots.txt
disallow , meta или X-Robots-Tag noindex,nofollow и none ) не будут скачаны;
- Если сайт пересканируется, все изображения с теми же путями будут перезаписаны, но останутся старые, поэтому удаляйте, переименовывайте или перемещайте папку с файлами до следующего парсинга;
- Если изображение будет отвечать нескольким
псевдонимам , оно будет загружено в каждую из этих подпапок;
- Файлы, которые не были загружены из-за проблем, отображаются в аудите, а не в выгрузке результатов скрейпинга;
- C помощью стандартного поиска в вашей ОС, можно искать атрибуты в нужных папках;
- При загрузке файлов появится панель загрузки в нижней части браузера, если для вас это проблема то, чтобы скрыть её, используйте сторонние расширения, такие как Hide Download Bar или Disable Download Bar;
- Чтобы недопустить присвоение одного псевдонима картинкам в разных местах в макете страницы, используйте
# ;
- Метод не работает с ftp каталогами;
- При загрузке может произойти редирект, однако в папке и выгрузке будет указан первичный путь из HTML-кода;
- Если файл будет найден по другому правилу с другим псевдонимом, файл будет закачиваться еще раз;
- Дубликаты изображений с тем же адресом можно посмотреть в самой выгрузке;
- Проверьте, что свободно в несколько раз больше от необходимого (по прикидкам) места на жестком диске, так как базам данных LinksTamed тоже нужно место и с запасом.
@@@DISC[…,…] . Иногда может понадобиться заменить фрагмент адреса на другой, например, чтобы загрузить не превью, а полную картинку, адрес которой недоступен в DOM-дереве (например, на сайте есть изображения в теге img с альтернативными разрешениями в атрибуте srcset , при этом указанное по умолчанию в атрибуте src изображение не того разрешения, которое нужно). Используйте для этого после @@@DISC выражение [заменяемый_фрагмент,вставляемый_фрагмент] или [заменяемый_фрагмент,] для удаления фрагмента. Допускаются несколько выражений для замены @@@DISC[…,…][…,…] . Одно правило срабатывает один раз и его нужно повторить для замены в нескольких местах адреса идентичных фрагментов. Адрес меняется и в выгрузке.
| # и
## | # делает правило одноразовым. Это означает, что правило сработает только один раз на каждой странице и далее больше не будет искаться в этом документе. Защищает от ложных повторных срабатываний и улучшает производительность, особенно когда первые условия правила часто срабатывают и когда в правиле есть / или // .
Чтобы остановить поиск условий вообще, укажите метод остановки ==##==псевдоним для последнего по коду правила, которое точно или высоковероятно будет найдено. В этом случае остановится анализ правил из обоих текстовых полей. Если это затруднительно или нет правила, которое с гарантией будет присутствовать на странице, но есть другие опорные элементы (которые подойдут под простое правило), используйте остановочное правило с указанием ==##== БЕЗ псевдонима. Указать такое правило особенно важно в случаях, когда есть правила без указания [url=…] , которые будут искаться на всех страницах, включая и те, где они быть не могут, в этом случае пометьте контейнер типичный для большинства шаблонов, который находится после собираемых на других страницах данных. После срабатывания остановочного правила, поиск полей будет отключен и продолжен обычный парсинг, а в режиме ускоренный web scraping — обход продолжится ускоренно и лишь для поиска новых ссылок.
▼
Важные моменты:
- Может
# и ## могут сочетаться с любыми методами извлечения, быть перед или после них внутри ==…== ;
- Если для тега срабатывает
## и другое правило, оно может успеть сработать до остановки согласно приоритетам, описанным в подразделе Отдельные моменты при разметке ссылок;
- При указании правил в текстовом поле разметки ссылок, если
# и ## применено к контейнеру, все ссылки внутри него будут размечены, а уже следующий будет проигнорирован, поэтому к практически каждому контейнеру можно применять # или ## . Таким образом, нельзя прервать разметку ссылок внутри контейнера, для которого уже сработало правило, любые методы остановки сработают только после этого контейнера;
## единственное, что едино для текстовых полей разметки ссылок и веб-скрейпинга, поэтому приведет к остановке исследования правил из обоих текстовых полей;
- При выборе опционального режима ускоренный web scraping важно убедиться, что обход может остановиться, для этого лучше использовать
## в правиле, которое должно сработать на блоке ниже остальных в исходном коде;
- Если для страницы правильно и четко указаны правила, все содержат метод остановки
# и все будут найдены — поиск правил остановится, однако если будут лишние или отсутствовать желаемые, обход будет продолжаться в холостую.
| ^ или ^[n] | Позволяет подняться на указанное кол-во уровней выше по DOM-дереву и получить контент с учетом родителей: ^ или ^[1] — на один уровень; ^[n] на указанное количество уровней. Для парсинга всего HTML-документа используйте большое число — будет взят контент последнего (первого) существующего контейнера — HTML. Может быть в любом месте внутри ==…== и сочетаться с другими методами.
| ==NOTadd==Позволяет не добавлять правило. Чтобы остановить исследование правил, используйте правило с ==##NOTadd== без псевдонима в конце, который имеет смысл использовать только для визуализации в инструменте тестирования. Про другие варианты использования как ссылки в других правилах, в том числе как задать диапазон, читайте в описании к условию LINKto= .
| ==ignore==Позволяет полностью игнорировать блоки макета (включая ссылки) при всех видах сбора данных, в том числе и при обычном парсинге, как будто их нет вообще. Основное назначение - сделать алгоритм поиска частичных дубликатов страниц более чувствительным и ускорить его за счет исключения областей документа с, например, подгружамемыми к основному материалу статьи другими статьями или просто шаблонными блоками. Стоит учитывать, что если краулер работает не по списку и самостоятельно обходит страницы, он может не попасть на какие-то страницы, так как игнорируемых ссылок для него не существует. Это правило можно вписать в текстовое поле ввода правил скрейпинга или разметки ссылок.
▼
Важные моменты:
- Если метод затронет первый заголовок
<h1> , это скажется на его отображении в главной таблице с данными (может быть показан и последующий незатронутый методом H1, если их несколько) и может повлиять на оценку дубликатов (так как он имеет повышенное влияние). Также возможно сообщение в аудите о пустом H1;
- Допустим только чистый метод
==ignore== и сочетание ==#ignore== ;
- Метод не окажет влияние на заголовок
<title> страницы и meta description ;
- Нельзя управлять индексацией: заставить игнорировать
canonical , noindex и none .
- Если для одного и того же тега срабатывает
ignore и другое правило (это, в основном, касается извлечения данных), оно может успеть сработать до включения игнорирования согласно приоритетам, описанным в подразделе Отдельные моменты при разметке ссылок;
- При грубом удалении меню и шаблонных элементов макета со ссылками значительно исказится ссылочная структура, поэтому расчет статического веса сможет стать бессмысленным. Метод относительно безопасен при удалении футера (подвала) сайта. Вернуть при
ignore удаленные ссылки не получится без повторного парсинга;
- Чтобы сохранить ссылочную структуру и дать возможность краулеру двигаться по ссылкам из удаляемых блоков используйте метод
==nottext== описанный далее;
- Так как блоки игнорируются, парсер не найдет ссылки в них для добавления в очередь обхода. Если они будут получены по списку или из файла sitemap.xml, для них не будет рассчитан УВ (уровень вложенности от главной);
==…==псевдоним имеет смысл указать только для визуализации при работе с инструментом тестирования правил, описанным чуть ниже.
==nottext==Позволяет не добавлять текст и анкоры из подпадающей под правило области не нарушая ссылочной структуры. Повышает чуствительнось алгоритма поиска неявных дубликатов к тексту из оставшихся областей страницы и ускоряет его пропорционально длине исключенного текста, что ощутимо при удалении больших меню со ссылками. Ссылки (уже без анкоров) остаются видимыми и учитываются по правилам, что позволяет краулеру находить и двигаться по ссылкам самостоятельно, как обычно, найдя таким образом все доступные страницы. Таким образом, остается возможность правильно рассчитать статический вес в отличие от метода ==ignore== , который пусть и работает несколько производительней, но удаляет область полностью, включая ссылки. Если на сайте имеются секционные теги <NAV> или <FOOTER> , они являются первыми кандидатами на использование метода (конечно, если на сайте они указаны правильно и не затрагивают важного контента).
▼
Важные моменты:
- Если метод затронет первый заголовок
<h1> , это скажется на его отображении в главной таблице с данными (может быть показан и последующий незатронутый методом H1, если их несколько) и может повлиять на оценку дубликатов (так как он имеет повышенное влияние). Также возможно сообщение в аудите о пустом H1; - Правило может быть указано только в текстовом поле разметки ссылок;
- Метод не окажет влияние на заголовок
<title> страницы и meta description ;
- Допустим только чистый метод
==nottext==псевдоним и сочетание c # в виде ==#nottext==псевдоним ;
- Указанный в конце
псевдоним должен быть максимально коротким, так как им помечаются ссылки. Этими же псевдонимами можно исключать ссылки из расчетов при перерасчетах после парсинга;
- Так как может быть не более двух меток для ссылки, если вторая будет занята, она будет перезаписана на текущий (в других методах назначенные метки не перезаписываются);
- Другие правила и методы извлечения продолжают действовать внутри затронутых блоков.
| | | | | | | | | | | | | | | | | | | | | | | |