打开上一篇下载的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);
});
运行,即可得到最简洁最核心的校花内容。
0 条评论。