Node.js jade mongodb mongoose实现了将爬虫分离到存储并生成静态文件的方法
然后本文Node.js jade抓取所有博客文章生成静态html文件并继续。本文实现了文件的收集和静态文件的生成。在实际的收集项目中,应该先存储静态文件,然后有选择地生成。
然后我选择的数据库是mongodb。为什么要使用这个数据库?因为这个数据库是基于集合的,所以数据的操作基本上是json,与dom模块cheerio有很大的亲和力。cheerio可以直接将过滤后的数据插入mongodb,无需任何处理,非常方便。不用说,与node.js的亲和力更重要,性能也很出色。本文不会专门写mongodb的基本用法,但我会从0开始再写一篇文章来写mongodb的基本常用用法。首先看入库的效果和生成静态文件的效果。
在这个阶段,我将爬虫分成两个模块,将它们收集到数据库中(crawler.js),并生成一个静态文件(makeHtml.js)。
crawler.js:
var http=require(' http ');var cherio=require(' cherio ');var mongose=必选(' mongose ');猫鼬。承诺=全球。承诺;var DB _ URL=' MongoDB ://localhost :27017/crawler ';var ArtI=[];//博客文章列表信息var AurL=[];//博客所有的文章urlvar DB=猫鼬。创建连接(数据库_网址);db.on('connected ',function(err){ if(err){ console。日志(err);} else { console.log('db连接成功');}});var Schema=猫鼬。图式;var arcSchema=新模式({ id: Number,//文章id title:字符串,//文章标题url:字符串,//文章链接body: String,//文章内容entry: String,//摘要列表时间:日期/发布时间});var Article=db.model('Article ',arcSchema);函数保存文章(arcInfo){ var arcModel=新文章(arcInfo);arcModel.save(函数(错误,结果){ if(错误){ console。日志(err);} else { console。日志(`$ { arcInfo[' title ']}插入成功`);} });}函数过滤文章(html){ var $=cheerio。加载(html);var arcDetail={ };var title=$('#cb_post_title_url ').text();var href=$('#cb_post_title_url ').attr(' href ');var re=/\/(\d )\ .html/;var id=href。匹配(重新)[1];var body=$('#cnblogs_post_body ').html();返回{ id: id,title: title,url: href,body : body };}函数crawler arc(URL){ var html=' ';var str=var arcDetail={ };http.get(url,function (res) { res.on('data ',function(chunk){ html=chunk;});res.on('end ',function(){ arcDetail=filter article(html);保存文章(arcDetail);if(AurL。length){ setTimeout(函数(){ if(AurL。长度){履带弧(AurL。shift());} }, 100);}else { console.log('采集任务完成' );返回;} });});}函数FilterHTML(html){ var $=cheerio。加载(html);var arcList=[];var aPost=$('#content ').查找('。后列表项目');阿波斯特。每个(function(){ var ele=$(this);var title=ele.find('h2 a ').text();var url=ele.find('h2 a ').attr(' href ');ele.find ' .c _ b _ p _ desc a’.移除();var entry=ele.find ' .c_b_p_desc ' .text();ele.find('小a ').移除();var listTime=ele.find('small ').text();var re=/\ d { 4 }-\ d { 2 }-\ d { 2 } \ s * \ d { 2 }[:]\ d { 2 }/;列表时间=列表时间。match(re)[0];arcList.push({ title: title,url: url,entry: entry,listimes : listimes });});返回arcList}函数NextPage(html){ var $=cheerio。加载(html);var NextURl=$(' # pager a : last-child ').attr(' href ');if(!nextUrl)返回GetArcurl(ArtI);var CurPage=$(' #寻呼机.当前')。text();if(!cur page)cur page=1;var下一页=下一个网址。子字符串(下一个网址。indexof('=')1);if (curPage下一页)爬虫(下一个网址);}函数crawler(url) { http.get(url,function(RES){ var html=' ';res.on('data ',function(chunk){ html=chunk;});res.on('end ',function(){ ArtI。push(FilterHTML(html));下一页(html);});});}函数getArcUrl(arcList){ for(arcList中的定义变量键){ for(arcList[key]中的var k)} { aurl。推送(arcList[key][k][' URL ']);} } crawler arc(AuRL。shift());} var URL='http://www.cnblogs.com/ghostwu/';爬虫(网址);其他的核心模块没有怎么改动,主要增加了数据库连接,数据库创建,集合创建(集合相当于关系型数据库中的表),Schema(相当于关系型数据库的表结构).
猫鼬操作数据库(save:插入数据).分离了文件生成模块。
makeHtml.js文件
var fs=require(' fs ');var jade=require(' jade ');var mongose=必选(' mongose ');猫鼬。承诺=全球。承诺;var DB _ URL=' MongoDB ://localhost :27017/crawler ';var ALlarc=[];定义变量计数=0;var DB=猫鼬。创建连接;db.on('connected ',function(err){ if(err){ console。日志(err);} else { console.log('db连接成功');}});var Schema=猫鼬。图式;var arcSchema=新模式({ id: Number,//文章id title:字符串,//文章标题url:字符串,//文章链接body: String,//文章内容entry: String,//摘要列表时间:日期/发布时间});var Article=db.model('Article ',arcSchema);函数MakeHTML(arcDetail){ str=jade。Renderfile(' ./视图/布局。‘玉’,弧形细节);计数;fs.writeFile(' ./html/"计数"。html ',字符串,函数(err){ if(err){ console。日志(err);}控制台。日志(`$ { arcDetail[' id ']} .超文本标记语言创建成功`计数;if(allarc。length){ setTimeout(function(){ make html(allarc。shift());}, 100 );} });}函数getallac(){ article。查找({ },函数(err,arcs){ ALlarc=arcs;制作HTMl(ALlarc。shift());} ).排序({ ' id ' : 1 });} GetArlac();以上这篇Node.js jade mongodb mongoose实现爬虫分离入库与生成静态文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
版权声明:Node.js jade mongodb mongoose实现了将爬虫分离到存储并生成静态文件的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。