Вход

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


singaporian
08.08.2013, 20:50
Здравствуйте.

Пытаюсь выдернуть из сайта внутренности тегов <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
Спасибо!