Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   htmlparser2. Надо выдернуть только тест внутри тега. (https://javascript.ru/forum/misc/40521-htmlparser2-nado-vydernut-tolko-test-vnutri-tega.html)

singaporian 08.08.2013 20:50

htmlparser2. Надо выдернуть только тест внутри тега.
 
Здравствуйте.

Пытаюсь выдернуть из сайта внутренности тегов <tr class="abc"></tr>
Но у меня получается на столько запущенная каша, что я даже не могу сформулировать, что же я вытянул из html-страницы.

Подскажите пожалуйста, что надо изменить, чтобы вытаскивать только то, что внутри тега <tr>.

request(testURL, function (error, response, body) {
    if (!error && response.statusCode == 200) {

        var parser = new htmlparser.Parser({
            onopentag: function(name, attribs){
                if(name === "tr" && attribs.class === "abc" ){
                    console.log(name,attribs);
                }
            },
            ontext: function(text){
                console.log("text: ", text);
            },
            onclosetag: function(tagname){
                if(tagname === "tr"){
                    console.log("Next one");
                }
            }
        });
        parser.write(body);
        parser.end();
    }
})

danik.js 08.08.2013 21:16

заведи массив rowStack. При появлении tr пушишь в массив что-нибудь (например, true). Кроме того, проверяешь всякий раз этот стэк на пустоту. Если не пуст - ты внутри tr, лови тег/текст. Если пуст - ты вне строки.
По закрытию тега tr делай rowStack.pop()

Стэк нужно использовать потому что внутри одной таблицы может находиться другая. Если таких случаев у тебя заведомо не будет - можешь обойтись просто флагом inTableRow : true/false

danik.js 08.08.2013 21:17

Другой вариант - построить DOM. Затем уже через querySelector сделать выборку (как в браузере).
Но это уже затратный по производительности способ.

singaporian 08.08.2013 21:31

Спасибо!


Часовой пояс GMT +3, время: 12:23.