使用node.js / cheerio进行网络抓取 - 无法获得<span>文本</span>

时间:2014-12-11 12:20:01

标签: node.js web-scraping cheerio

我需要制作一个简单的网络剪贴板,以实时获取有关雅典证券交易所的一些基本信息。我选择的武器是Node.js,更具体地说是'cheerio'模块。

我想要抓取的信息在网站中表示为某些元素中的文本。这些元素嵌套在另一个元素中。一个例子是:

<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'变量是否正确加载。

我开始怀疑这与文本中的字符有关。某些编码问题是否可能成为罪魁祸首?如果是,我该如何解决?

1 个答案:

答案 0 :(得分:3)

http://www.euro2day.gr/AseRealTime.aspx的原始html中没有数据在&quot;%deltatata&#39; 你可以看看抛出你的html变量。

数据是通过页面上的javascript同步设置的

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

使用ajax

获取页面加载http://www.euro2day.gr/handlers/data.ashx?type=3可能会更简单