使用node.js在Windows上抓取网站

时间:2011-10-18 00:27:15

标签: jquery node.js jsdom

尝试让jsdom(node.js模块)在Windows上运行。 继续抱怨没有为我的节点版本构建。

在linux机器上安装了节点(相同版本,0.5.9,来自源代码),节点对其进行了操作。 然后我将它复制到Windows机器(在node_modules下)

仍然没有......

有什么想法吗?或解析HTML的其他建议我从对节点的请求的响应得到了什么?

通过jsdom使用jquery会很好。

干杯。

4 个答案:

答案 0 :(得分:2)

我很遗憾地说jsdom(> = 0.2.3)目前需要一个c ++插件,它不能与windows配合使用。我认为你最好的选择是尝试安装jsdom@0.2.1并解决因在jsdom窗口的上下文中执行javascript而导致的内存泄漏。

解决方法包括:

  • 每dom生成一个新进程
  • 重用窗口并通过document.body.innerHTML = '..new markup..';
  • 替换DOM

目的是摆脱c ++插件,但不幸的是,目前不可能这样做。

答案 1 :(得分:1)

如果node.js不是绝对必须的,请查看我们的同事SO-ist @nrabinowitz的pjscrape。经过测试和验证。

此外,node-scraper似乎是适合您工作的工具,有222名观察员和11名叉子,它似乎也非常活跃。可以在readmeright here on SO中找到用例。

答案 2 :(得分:0)

我不确定你要做什么,但node.io has a scraping framework可能符合要求。

答案 3 :(得分:0)

我刚刚玩了node.js模块 Cheerio ,并与jsdom比较,它是:

  • 快得多
  • 更容易安装
  • 对破碎的HTML(与jsdom相比)更具弹性
  • 并提供了大多数使用服务器端的jQuery函数

http://matthewmueller.github.com/cheerio/


刮痧示例:

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

request('http://encosia.com', function(error, response, body) {

  // Hand the HTML response off to Cheerio and assign that to
  // a local $ variable to provide familiar jQuery syntax.
  var $ = cheerio.load(body);

  // Exactly the same code that we used in the browser before:
  $('h2').each(function() {
      console.log($(this).text());
  });

});