Предполагается, что я использую рекурсивный цикл для упругого обнаружения и определения местоположения элементов DOM, которые будут работать с полуструктурированными и полуоднородными документами HTML DOM с веб-сайта.
Например, при сканировании ссылок на веб-сайте и при обнаружении небольших изменений его местоположения в xpath. Устойчивость необходима для обеспечения гибкого непрерывного сканирования.
1)
Я знаю, что хочу ссылку, которая
расположен в определенном регионе
страница отличается от остальных
(например, нижний колонтитул меню, заголовок и т. д.)
2)
Это различимо, так как
оказывается внутри стола и
Парграф или контейнер.
3)
Может быть приемлемый уровень
неожиданных родителей или детей
перед этой желаемой ссылкой, упомянутой в
1)
но я не знаю что. Больше
неожиданные элементы будут означать
вылет из 1)
.
4)
Идентификация с помощью идентификатора элемента и
класс или любой другой уникальный атрибут
значение не желательно.
Я думаю, что следующий xpath должен подвести итог:
/`/p/table/tr/td/a`
на некоторых страницах есть изменения в xpath, но они по-прежнему квалифицируются как 1) требуемая ссылка
//p/div/table/tr/td/a
или //p/div/span/span/table/tr/td/b/a
Я использовал отступ для имитации каждой итерации цикла (
( я должен использовать плюральное или единственное число? Дети против ребенка. Родители против родителя. Я думаю, что единственное число имеет смысл, поскольку непосредственный родитель или ребенок здесь важны. )
Поиск сверху вниз :
how many p's are there ?
how many these p's have table as child ? If none, search next sub level.
how many these table's have tr as child ? If none, search next sub level.
how many these tr have td as child ? If none, search next sub level.
how many these td have a as child ?
ПОИСК ВНИЗ :
how many a's are there ?
how many of these a's have td as parent ? If none, look up to the next super level.
how many of these td have tr as parent ? If none, look up to the next super level.
how many of these tr have table as parent ? If none, look up to the next super level.
how many of these table have p as a parent ? If none, look up to the next super level.
Имеет ли значение, если это сверху вниз или снизу вверх? Я чувствую, что нисходящий поток бесполезен и неэффективен, если он поворачивается к концу цикла, нужная якорная ссылка не найдена.
Я думаю, что я бы также измерил, сколько неожиданных родителей или детей было обнаружено в каждой итерации цикла, и сравнил бы с заданной константой, с которой мне удобно работать, например, скажем, не более 2. Если есть 3 или более неожиданных итерации родителей или детей до обнаружения желаемой якорной ссылки, я бы предположил, что это не то, что я ищу.
Это правильный подход? Это просто то, что я придумал на макушке. Я прошу прощения, если эта проблема не ясна, я старался изо всех сил. Я хотел бы получить некоторую информацию об этом алгоритме.