使用 node.js 在 Windows 上抓取网站
Posted
技术标签:
【中文标题】使用 node.js 在 Windows 上抓取网站【英文标题】:use node.js to scrape web site on Windows 【发布时间】:2011-12-09 17:05:03 【问题描述】:试图让 jsdom(node.js 模块)在 Windows 上工作。 一直抱怨没有为我的节点版本构建。
在 linux 机器上安装了节点(相同版本,0.5.9,来自源代码)并对其进行了节点处理。 然后我将它复制到 Windows 机器(在 node_modules 下)
还是不行……
有什么想法吗?还是从对节点发出的请求的响应中获得的解析 html 的其他建议?
通过 jsdom 使用 jquery 会很不错。
干杯。
【问题讨论】:
【参考方案1】:很抱歉,jsdom (>=0.2.3) 目前需要一个 c++ 插件,它不能很好地与 Windows 配合使用。我认为你最好的办法是尝试安装 jsdom@0.2.1 并解决在 jsdom 的窗口上下文中执行 javascript 导致的内存泄漏。
解决方法包括:
为每个 dom 生成一个新进程 重用一个窗口并通过document.body.innerHTML = '..new markup..';
替换DOM
我们的目的是远离 c++ 插件,但不幸的是,目前不可能。
【讨论】:
【参考方案2】:如果 node.js 不是绝对必须的,请查看我们的 SO-ist @nrabinowitz 的 pjscrape。它已经过测试和证明。
此外,node-scraper 似乎是适合您工作的工具,它有 222 个观察者和 11 个分叉,它似乎也很活跃。可以在readme 或right here on SO 中找到用例。
【讨论】:
好的,我已经检查过了。不去。 node-scraper 需要 contextify,同样的错误 无法安装 contextify。它抱怨它还没有为我的节点版本(Windows 上的 0.5.9)构建。由于windows上没有node-waf,我尝试在linux上安装node 0.5.9,下载contextify并构建它,然后将其传输到windows上的node_modules文件夹,但它仍然在抱怨。【参考方案3】:我不确定您到底想做什么,但node.io has a scraping framework 可能符合要求。
【讨论】:
谢谢,我也去看看。 不行。抱怨缺少模块,甚至没有告诉我它是哪个模块。 如果您使用的是 windows,则需要查看 package.js 文件并手动下载解决依赖关系所需的模块。或者您可以在 Windows 上尝试 npm 的实验版本并执行 npm install (check the readme)。 好吧,这取决于jsdom,这是最初的问题。【参考方案4】:一直在玩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());
);
);
【讨论】:
以上是关于使用 node.js 在 Windows 上抓取网站的主要内容,如果未能解决你的问题,请参考以下文章
周五免费直播 | Node.JS实战:爬虫抓取花瓣网图片饥人谷