全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Node.js+jade抓取博客所有文章生成静态html文件的实例

这篇文章,我们就把上文中采集到的所有文章列表的信息整理一下,开始采集文章并且生成静态html文件了.先看下我的采集效果,我的博客目前77篇文章,1分钟不到就全部采集生成完毕了,这里我截了部分的图片,文件名用文章的id生成的,生成的文章,我写了一个简单的静态模板,所有的文章都是根据这个模板生成的.

项目结构:

好了,接下来,我们就来讲解下,这篇文章主要实现的功能:

1,抓取文章,主要抓取文章的标题,内容,超链接,文章id(用于生成静态html文件)

2,根据jade模板生成html文件

一、抓取文章如何实现?

非常简单,跟上文抓取文章列表的实现差不多

function crawlerArc( url ){
  var html = '';
  var str = '';
  var arcDetail = {};
  http.get(url, function (res) {
    res.on('data', function (chunk) {
      html += chunk;
    });
    res.on('end', function () {
      arcDetail = filterArticle( html );
      str = jade.renderFile('./views/layout.jade', arcDetail );
      fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
        if( err ) {
          console.log( err );
        }
        console.log( 'success:' + url );
        if ( aUrl.length ) crawlerArc( aUrl.shift() );
      } );
    });
  });
}

参数url就是文章的地址,把文章的内容抓取完毕之后,调用filterArticle( html ) 过滤出需要的文章信息(id, 标题,超链接,内容),然后用jade的renderFile这个api,实现模板内容的替换,

模板内容替换完之后,肯定就需要生成html文件了, 所以用writeFile写入文件,写入文件时候,用id作为html文件名称。这就是生成一篇静态html文件的实现,

接下来就是循环生成静态html文件了, 就是下面这行:

if ( aUrl.length ) crawlerArc( aUrl.shift() );

aUrl保存的是我的博客所有文章的url, 每次采集完一篇文章之后,就把当前文章的url删除,让下一篇文章的url出来,继续采集

完整的实现代码server.js:

var fs = require( 'fs' );
var http = require( 'http' );
var cheerio = require( 'cheerio' );
var jade = require( 'jade' );

var aList = [];
var aUrl = [];

function filterArticle(html) {
  var $ = cheerio.load( 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.match( re )[1];
  var body = $( "#cnblogs_post_body" ).html();
  return {
    id : id,
    title : title,
    href : href,
    body : body
  };
}

function crawlerArc( url ){
  var html = '';
  var str = '';
  var arcDetail = {};
  http.get(url, function (res) {
    res.on('data', function (chunk) {
      html += chunk;
    });
    res.on('end', function () {
      arcDetail = filterArticle( html );
      str = jade.renderFile('./views/layout.jade', arcDetail );
      fs.writeFile( './html/' + arcDetail['id'] + '.html', str, function( err ){
        if( err ) {
          console.log( err );
        }
        console.log( 'success:' + url );
        if ( aUrl.length ) crawlerArc( aUrl.shift() );
      } );
    });
  });
}

function filterHtml(html) {
  var $ = cheerio.load(html);
  var arcList = [];
  var aPost = $("#content").find(".post-list-item");
  aPost.each(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").remove();
    var entry = ele.find(".c_b_p_desc").text();
    ele.find("small a").remove();
    var listTime = ele.find("small").text();
    var re = /\d{4}-\d{2}-\d{2}\s*\d{2}[:]\d{2}/;
    listTime = listTime.match(re)[0];

    arcList.push({
      title: title,
      url: url,
      entry: entry,
      listTime: listTime
    });
  });
  return arcList;
}

function nextPage( html ){
  var $ = cheerio.load(html);
  var nextUrl = $("#pager a:last-child").attr('href');
  if ( !nextUrl ) return getArcUrl( aList );
  var curPage = $("#pager .current").text();
  if( !curPage ) curPage = 1;
  var nextPage = nextUrl.substring( nextUrl.indexOf( '=' ) + 1 );
  if ( curPage < nextPage ) crawler( nextUrl );
}

function crawler(url) {
  http.get(url, function (res) {
    var html = '';
    res.on('data', function (chunk) {
      html += chunk;
    });
    res.on('end', function () {
      aList.push( filterHtml(html) );
      nextPage( html );
    });
  });
}

function getArcUrl( arcList ){
  for( var key in arcList ){
    for( var k in arcList[key] ){
      aUrl.push( arcList[key][k]['url'] );
    }
  }
  crawlerArc( aUrl.shift() );
}

var url = 'http://www.cnblogs.com/ghostwu/';
crawler( url );

layout.jade文件:

doctype html
html
  head
    meta(charset='utf-8')
    title jade+node.js express
    link(rel="stylesheet", href='./css/bower_components/bootstrap/dist/css/bootstrap.min.css')
  body
    block header
      div.container
        div.well.well-lg
          h3 ghostwu的博客
          p js高手之路
    block container
      div.container
        h3
          a(href="#{href}" rel="external nofollow" ) !{title}
        p !{body}
    block footer
      div.container
        footer 版权所有 - by ghostwu

后续的打算:

1,采用mongodb入库

2,支持断点采集

3,采集图片

4,采集小说

等等....

以上这篇Node.js+jade抓取博客所有文章生成静态html文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# nodejs  # 生成静态html  # 利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)  # 基于Node.js搭建hexo博客过程详解  # node.js博客项目开发手记  # node.js实现博客小爬虫的实例代码  # Node.js完整实现博客系统详解  # 就把  # 给大家  # 这篇文章  # 文章列表  # 我的博客  # 的是  # 都是  # 超链接  # 好了  # 这就是  # 之路  # 博客  # 希望能  # 下一  # 写了  # 这篇  # 小编  # 先看  # 一篇文章  # 大家多多 


相关文章: 网站制作软件免费下载安装,有哪些免费下载的软件网站?  定制建站策划方案_专业建站与网站建设方案一站式指南  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  网站制作公司排行榜,抖音怎样做个人官方网站  如何实现建站之星域名转发设置?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何通过商城免费建站系统源码自定义网站主题?  如何快速生成凡客建站的专业级图册?  如何用PHP快速搭建高效网站?分步指南  如何用花生壳三步快速搭建专属网站?  如何快速搭建虚拟主机网站?新手必看指南  香港服务器租用费用高吗?如何避免常见误区?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  制作网站的模板软件,网站怎么建设?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  高性价比服务器租赁——企业级配置与24小时运维服务  如何通过FTP服务器快速搭建网站?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何通过wdcp面板快速创建网站?  ,巨量百应是干嘛的?  建设网站制作价格,怎样建立自己的公司网站?  行程制作网站有哪些,第三方机票电子行程单怎么开?  建站之星价格显示格式升级,你的预算足够吗?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  已有域名如何快速搭建专属网站?  建站主机服务器选购指南:轻量应用与VPS配置解析  建站主机CVM配置优化、SEO策略与性能提升指南  如何通过.red域名打造高辨识度品牌网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  网站制作壁纸教程视频,电脑壁纸网站?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何在万网主机上快速搭建网站?  5种Android数据存储方式汇总  建站之星IIS配置教程:代码生成技巧与站点搭建指南  定制建站流程解析:需求评估与SEO优化功能开发指南  如何用免费手机建站系统零基础打造专业网站?  建站之星如何通过成品分离优化网站效率?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  头像制作网站在线制作软件,dw网页背景图像怎么设置?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  平台云上自助建站如何快速打造专业网站?  智能起名网站制作软件有哪些,制作logo的软件?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。