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

发布于 2024-12-10 17:27:50 字数 256 浏览 0 评论 0 原文

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

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

仍然不行...

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

通过 jsdom 使用 jquery 会很方便。

干杯。

Trying to get jsdom (node.js module) to work on windows.
Keeps complaining about not being built for my node version.

Got node (same version, 0.5.9, from source) installed on a linux machine and node-waffed it.
then i copied it to the windows machine (under node_modules)

Still no go...

Any ideas? or other recommendations for parsing HTML I get from a response to a request I make from node?

Using jquery via jsdom would've been sweet.

Cheers.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

快乐很简单 2024-12-17 17:27:50

我很遗憾地说 jsdom (>=0.2.3) 目前需要一个 C++ 插件,它在 Windows 上运行得不太好。我认为你最好的选择是尝试安装 [email protected] 并解决在 jsdom 窗口上下文中执行 javascript 导致的内存泄漏。

解决方法包括:

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

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

I'm sorry to say that jsdom (>=0.2.3) currently requires a c++ addon which does not play nice with windows. I think your best bet would be to try and install [email protected] and work around the memory leak caused by executing javascript in the context of jsdom's window.

Workarounds include:

  • spawn a new process per dom
  • reuse a window and replace the DOM by way of document.body.innerHTML = '..new markup..';

The intention is to move away from the c++ addon, but unfortunately that is not a possibility at this time.

一袭白衣梦中忆 2024-12-17 17:27:50

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

此外,node-scraper 似乎是适合您工作的工具,拥有 222 个观察者和 11 个观察者叉子似乎也相当活跃。可以在自述文件就在这里。

If node.js is not an absolute must, check out pjscrape by our fellow SO-ist @nrabinowitz. It's tested and proven.

Also, node-scraper seems to be the right tool for your job, with 222 watchers and 11 forks it also seems to be pretty active. A use case can be found in the readme or right here on SO.

行至春深 2024-12-17 17:27:50

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

I'm not sure exactly what you're trying to do, but node.io has a scraping framework that might fit the bill.

放赐 2024-12-17 17:27:50

我刚刚开始使用 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());
  });

});

I've just been playing with the node.js module Cheerio, and compared with jsdom, it's:

  • Much faster
  • Much easier to install
  • Much more resilient to broken HTML (compared with jsdom)
  • And provides most of the jQuery functions you would use server-side

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


Scraping example:

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());
  });

});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文