[nodejs实战:校花网学妹图片采集+站点发布]三、数据的筛选:cheerio模块

打开上一篇下载的xiaohua.html文件发现,我们把所有代码原封不动的都下载下来了,甚至连校花网的广告都没放过,但是图片因为校花网用的是相对路径而不能正常显示的情况。而我们需要的仅仅是学妹的资料跟图片就可以了。那我们怎么从这些代码中筛选这些内容呢?

我第一时间想到的是利用正则,因为之前用php采集的时候都用的是正则筛选,后来发现cheerio模块这个大利器,他可以让我们通过仿jquery的方式来筛选数据,这对我们前端来说简直就是福音啊。

来,上代码:

var http = require("http");
var cheerio = require("cheerio");
var iconv = require('iconv-lite');
var fs = require("fs");
var BufferHelper = require('bufferhelper');
var url = 'http://www.xiaohuar.com/news-1-1722.html';
http.get(url, function (res) {
    var bufferHelper = new BufferHelper();
    res.on('data', function (chunk) {
        bufferHelper.concat(chunk);
    }).on('end', function () {
        var val = iconv.decode(bufferHelper.toBuffer(), 'gb2312');
        var $ = cheerio.load(val, {decodeEntities: false});//decodeEntities: false 避免乱码
        console.log($('title').html());//北京联合大学校花惠婉乔资料照片-校花网
        
    });

}).on('error', function (e) {
    console.log('Got error:' + e.message);
});

是不是很畅快!

好,我们来上完整的代码,只取出学妹的信息跟靓照并保存:

var http = require("http");
var cheerio = require("cheerio");
var iconv = require('iconv-lite');
var fs = require("fs");
var BufferHelper = require('bufferhelper');
var url = 'http://www.xiaohuar.com/news-1-1722.html';
http.get(url, function (res) {
    var bufferHelper = new BufferHelper();
    res.on('data', function (chunk) {
        bufferHelper.concat(chunk);
    }).on('end', function () {
        var val = iconv.decode(bufferHelper.toBuffer(), 'gb2312');//将获取到的数据由gb2312编码转成utf8编码
        var $ = cheerio.load(val, {decodeEntities: false});//decodeEntities: false 避免乱码
        var title = "<div id='title'>" + $(".wrap h1").html() + "</div>";//获取标题

        var contentObj = $(".content_wrap");//获取内容
        contentObj.find(".gg4,a").remove();//移除内容中的广告代码
        contentObj.find("p,img,span").each(function () {//移除不必要的标签属性,使代码更简洁
            $(this).removeAttr("class");
            $(this).removeAttr("style");
            $(this).removeAttr("alt");
            $(this).removeAttr("title");
            $(this).removeAttr("id");
        });
        var contentHtml = contentObj.html();//获取处理后的内容代码
        contentHtml = contentHtml.replace(/<span>/g, '');//从最新的内容代码中再移除span标签,使代码再简洁一些
        contentHtml = contentHtml.replace(/<\/span>/g, '');//同上
        contentHtml=contentHtml.replace(/src="\/d\/file/g, 'src="http://www.xiaohuar.com/d/file');//给图片添加校花网网址,将原来的相对路径改为绝对路径,使图片能正常显示
        contentHtml = "<div id='content'>" + contentHtml + "</div>";//拼凑最新的内容代码

        var mainHtml = title + contentHtml;//标题内容合并

        fs.writeFile('xiaohua.html', mainHtml,
            function () {
                console.log('保存成功');
            });
    });

}).on('error', function (e) {
    console.log('Got error:' + e.message);
});

运行,即可得到最简洁最核心的校花内容。

未经允许不得转载:前端撸码笔记 » [nodejs实战:校花网学妹图片采集+站点发布]三、数据的筛选:cheerio模块

上一篇:

下一篇: