2

试图让 jsdom(node.js 模块)在 Windows 上工作。一直抱怨没有为我的节点版本构建。

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

还是不行...

有任何想法吗?或从节点发出的请求的响应中获得的解析 HTML 的其他建议?

通过 jsdom 使用 jquery 会很不错。

干杯。

4

4 回答 4

2

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

解决方法包括:

  • 每个 dom 生成一个新进程
  • 重用一个窗口并通过以下方式替换 DOMdocument.body.innerHTML = '..new markup..';

目的是远离 c++ 插件,但不幸的是,目前不可能。

于 2011-10-24T23:10:17.457 回答
1

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

此外,node-scraper似乎是适合您工作的工具,有 222 个观察者和 11 个分叉,它似乎也很活跃。可以在自述文件或SO 上的此处找到用例。

于 2011-10-18T14:02:22.690 回答
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());
  });

});
于 2013-03-31T07:07:31.810 回答
0

我不确定你到底想要做什么,但node.io 有一个可能符合要求的抓取框架。

于 2011-10-18T13:52:13.943 回答