【问题标题】:Scraping fully rendered webpage with nodejs使用 nodejs 抓取完全呈现的网页
【发布时间】:2015-09-09 08:18:15
【问题描述】:

我正在尝试使用 nodejs 获取亚马逊定价信息。

这是目标网址: http://aws.amazon.com/ec2/pricing/

但是我在 nodejs 中阅读的定价表的内容没有完全呈现,只有 javascripts。

到目前为止,我已经使用了jsdomjquerygophantom,但我没有成功。即使设置超时也无济于事。任何人都可以为这个特定案例提供一个可行的解决方案吗?

谢谢和最好的问候。

【问题讨论】:

标签: javascript node.js web-scraping


【解决方案1】:

使用 node.js 抓取网页有多种方法

我的灵感来自spookjs

 var Spooky = require('spooky');

 var spooky = new Spooky({
    child: {
        transport: 'http'
    },
    casper: {
        logLevel: 'debug',
        verbose: true
    }
  }, function (err) {
    if (err) {
        e = new Error('Failed to initialize SpookyJS');
        e.details = err;
        throw e;
    }

    spooky.start(
        'http://en.wikipedia.org/wiki/Spooky_the_Tuff_Little_Ghost');
    spooky.then(function () {
        this.emit('hello', 'Hello, from ' + this.evaluate(function ()     {
            return document.title;
        }));
    });
    spooky.run();
});

spooky.on('error', function (e, stack) {
console.error(e);

if (stack) {
    console.log(stack);
}
});


spooky.on('console', function (line) {
   console.log(line);
});

spooky.on('hello', function (greeting) {
   console.log(greeting);
});

spooky.on('log', function (log) {
   if (log.space === 'remote') {
     console.log(log.message.replace(/ \- .*/, ''));
   }
});

注意:使用 node.js 可以灵活地运行 casperjs 和 phantom js

【讨论】:

  • 感谢您的回答。我没有尝试这个解决方案,因为我使用 phantom 模块和 phantomjs 成功读取了内容。我也发布了答案。但无论如何,再次感谢你。
【解决方案2】:

这解决了我的问题:

我注意到在 node 中安装 phantom 模块时,它抱怨 phantomjs 的版本(版本 2)并在某个临时位置下载版本(1.9.8)。

因此我安装了 1.9.8 版本并将 PATH 变量设置为该版本。它奏效了! 还必须注意,在 page.open(...) 函数中,您必须 setTimeout 相当长的时间(在我的情况下约为 35 秒),以便整个页面完全加载和呈现。

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多