如果想要在Node.js中分析HTML,应该使用哪个库呢?

突然在nodejs中出现了解析HTML的工作。

经过调查,发现了两个选项:jquery(与网页端的jQuery稍有不同)和cheerio。

1. jQuery – jQuery

主页:https://github.com/UncoolAJ86/node-jquery

安装只需两个命令:

npm install -S ‘jquery@>=2.1’
npm install -S ‘jsdom@latest’

然而,jsdom的安装速度很慢!

> contextify@0.1.8 install /Users/liubin/github/ss4cn/node_modules/jsdom/node_modules/contextify
> node-gyp rebuild

gyp http GET http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
  CXX(target) Release/obj.target/contextify/src/contextify.o
  SOLINK_MODULE(target) Release/contextify.node
  SOLINK_MODULE(target) Release/contextify.node: Finished
jsdom@0.10.6 node_modules/jsdom

需要先下载并构建Node.js本身。

使用的方法也很烦琐。具体请参考原始样本。

文件有缺陷。

2 个欢呼

主页:http://matthewmueller.github.io/cheerio/

安装过程简单而快速

npm install cheerio

有详细的文档提供。使用起来简单。

// from https://github.com/cheeriojs/cheerio
var cheerio = require('cheerio'),
    $ = cheerio.load('<h2 class="title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
//=> <h2 class="title welcome">Hello there!</h2>

缺点:没有直接从http获取HTML内容的方法。如果使用request包,就必须进行自定义实现。

最后的结果只有一个

我决定开始使用Cheerio。