Node.js+jade 블 로그 의 모든 글 을 캡 처 하여 정적 html 파일 을 만 드 는 인 스 턴 스
프로젝트 구성:
자,다음은 이 글 이 주로 실현 하 는 기능 에 대해 설명 하 겠 습 니 다.
1.글 을 캡 처 합 니 다.주로 글 의 제목,내용,하이퍼링크,글 id(정적 html 파일 생 성 에 사용)를 캡 처 합 니 다.
2,jade 템 플 릿 에 따라 html 파일 생 성
1.글 을 캡 처 하 는 것 은 어떻게 실현 합 니까?
아주 간단 합 니 다.위의 글 목록 을 캡 처 하 는 것 과 차이 가 많 지 않 습 니 다.
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 은 글 의 주소 입 니 다.글 의 내용 을 캡 처 한 후에 filter Article(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 파일 을 생 성 하 는 인 스 턴 스 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 이 저 희 를 많이 지지 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.