2014-12-11 1 views
0

Мне нужно сделать простой веб-скребок, чтобы получить базовую информацию об Афинской фондовой бирже в режиме реального времени. Мое оружие выбора - Node.js и, более конкретно, модуль cheerio.Веб-скребок с node.js/cheerio - невозможно получить <span> текст

Информация, которую я хочу захватить, представлена ​​на веб-сайте как текст внутри некоторых элементов. Эти элементы вложены внутри другого. Примером может служить следующее:

<span id="tickerGeneralIndex" class="style3red"> 
    <span class="percentagedelta"> 
    -0,50% 
    </span> 
</span> 

В этом случае данные, которые я хочу извлечь, составляют «-0,50%».

Код я написал это:

var request = require('request'), 
    cheerio = require('cheerio'); 

request('http://www.euro2day.gr/AseRealTime.aspx', function (error, response, html) { 
    if (!error && response.statusCode == 200) { 
     var $ = cheerio.load(html); 
     var span = $('span.percentagedelta').text(); 
     console.log(span); 
    } 
}); 

Этот код не дает желаемых результатов. При запуске он регистрирует одну пустую строку в консоли.

Я попытался изменить мой код, как это для целей тестирования:

var request = require('request'), 
    cheerio = require('cheerio'); 

request('http://www.euro2day.gr/AseRealTime.aspx', function (error, response, html) { 
    if (!error && response.statusCode == 200) { 
     var $ = cheerio.load(html); 
     var span = $('span.percentagedelta').attr('class'); 
     console.log(span); 
    } 
}); 

Таким образом, я получаю «percentagedelta» в консоли. Это правильно, поскольку я попросил получить класс элемента. Конечно, это не то, что я хотел. Я просто сделал это, чтобы выяснить, правильно ли загружена переменная «span».

Я начинаю подозревать, что это имеет какое-то отношение к символам в тексте. Возможно ли, что проблема с кодировкой виновата? И если да, как я могу это исправить?

ответ

3

Исходный html http://www.euro2day.gr/AseRealTime.aspx не имеет данных в 'percentagedelta' Вы можете посмотреть, как вы выбрали переменную html.

Данные настройки синхронных по JavaScript на странице

$("#tickerGeneralIndex .percentagedelta").html(data.percentageDelta); 

Может быть, это было бы более просто получать http://www.euro2day.gr/handlers/data.ashx?type=3, что страница загружается с AJAX

+0

@ Rax.Wunter Похоже, вы правы. Не могли бы вы рассказать о своем первом предложении? Если нет, я поеду с опцией JSON. В любом случае, спасибо заранее! – dsljanus

+2

Нет возможности получить нужные данные, запрашивая веб-страницу по сценарию, поскольку он не выполняет javascript. Вы можете пойти и использовать PhantomJs, например, он может запускать javascript на загруженной странице, но опция JSON намного проще. –

+0

Вы правы. Я потратил много времени, пытаясь научиться Cheerio и не собираюсь изучать Phantom (что нелегко из того, что я слышу). Итак ... JSON это тогда. – dsljanus

Смежные вопросы