cheerio是一个nodejs实现的类似jquery核心功能的一个模块,用它可以方便的将字符串解析成DOM文档,像用jquery一样方便的操作html。cheerio结合前面提到的nodejs的spider,可以将抓取的网页方便的提取出自己所需的内容。
1. 安装cheerio
npm install cheerio
2. 加载html
var cheerio = require('cheerio'); var $ = cheerio.load('<div><p>一行文字</p><img id = "img1" src="/a.jpg"/><img src="/b.jpg"/></div>');
3. 操作DOM
var p = $('p').text(); var img = $('#img1').attr('src'); console.log(p); console.log(img);
可以看到代码和jquery非常的相似。下面是each函数的用法
$('img').each(function (i, item) { var src = $(item).attr('src'); console.log(src); });
在开发本博客系统的过程中,我使用了cheerio生成的首页的文章列表中的摘要内容。博客的摘要首先列出了文章中3个图片,前300字采用文字环绕的方式。用cheerio实现很方便。假设前面那个html就是编写的文章。代码如下
var abstract = ''; $('img').each(function (i, item) { if (i >= 3) return false;//return false 可以提前跳出each abstract += '<img src="' + item.attribs.src + '">'; //这里不能使用 //abstract += $(item).toString(); //因为文章原有的img标签可能带有width,height,float等属性。影响摘要的排版 }); abstract += $.root().text().substr(0, 300) .replace(/&/g, '&').replace(/</g, '<') .replace(/'/g, '"') + '...'; console.log(abstract);