Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.08.2013, 20:50
Новичок на форуме
Отправить личное сообщение для singaporian Посмотреть профиль Найти все сообщения от singaporian
 
Регистрация: 08.08.2013
Сообщений: 8

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();
    }
})
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2013, 21:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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

Стэк нужно использовать потому что внутри одной таблицы может находиться другая. Если таких случаев у тебя заведомо не будет - можешь обойтись просто флагом inTableRow : true/false
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2013, 21:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Другой вариант - построить DOM. Затем уже через querySelector сделать выборку (как в браузере).
Но это уже затратный по производительности способ.
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2013, 21:31
Новичок на форуме
Отправить личное сообщение для singaporian Посмотреть профиль Найти все сообщения от singaporian
 
Регистрация: 08.08.2013
Сообщений: 8

Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
Как гугл получает объект внутри тега <script>? zilker Events/DOM/Window 4 19.03.2013 17:19
Почему не работает тег <script> внутри тега <div>? serviom Общие вопросы Javascript 10 26.11.2011 01:24