Как найти конкретное значение в большом объекте в node.js ?

#html #parsing #node.js

#HTML #синтаксический анализ #node.js

Вопрос:

На самом деле я проанализировал веб-сайт с помощью htmlparser, и я хотел бы найти конкретное значение внутри анализируемого объекта, например, строку «$ 199», и продолжайте отслеживать этот элемент (путем периодического синтаксического анализа), чтобы увидеть, что значение по-прежнему «$ 199» или изменилось.

И после некоторого болезненного глупого поиска с помощью моих глаз я обнаружил, что эта строка находится где-то вот так:

 price = handler.dom[3].children[3].children[3].children[5].children[1].
        children[3].children[3].children[5].children[0].children[0].raw;
  

Итак, я хотел бы знать, существуют ли методы, которые менее болезненны? Спасибо!

Комментарии:

1. Ваш вопрос неясен: вы пытаетесь подтвердить, что значение ‘$ 199’ существует в документе (в этом случае регулярное выражение над необработанным HTML может быть самым простым), или пытаетесь найти узел DOM, в котором он определен, или контекст вокруг него, или …?

2. обновлено. Надеюсь, это будет достаточно ясно, спасибо

Ответ №1:

Рекурсивный поиск на основе дерева, вероятно, будет проще всего получить интересующий вас узел.

Я не использовал htmlparser , и документация кажется немного тонкой, так что это всего лишь пример для начала, и он не тестировался:

 function getElement(el,val) {
    if (el.children amp;amp; el.children.length > 0) {
        for (var i = 0, l = el.children.length; i<l; i  ) {
            var r = getElement(el.children[i],val);
            if (r) return r;
        }
    } else {
        if (el.raw == val) {
            return el;
        }
    }
    return null;
}
  

Вызовите getElement(handler.dom[3],'$199') , и он будет проходить через все дочерние элементы рекурсивно, пока не найдет элемент без children , а затем сравнивает его необработанное значение с ‘$ 199’. Обратите внимание, что это прямое сравнение, возможно, вы захотите поменять это на регулярное выражение или подобное?