테스트 사이트 - 개발 중인 베타 버전입니다

파싱해서 DB로 저장해보기.

· 9년 전 · 3942 · 3

이쪽이 전문분야가 아니라 많이 부족합니다.

아~ 이렇게도 가능 하구나 하고 참조만 하세요.

(그누보드로 돌리면 리자님한테 혼납니다.)

 

[code]

var Spider = require('node-spider');

var mysql = require('mysql');

var conn = mysql.createConnection({

    host    :'localhost',

    port : 3306,

    user : 'DB아이디',

    password : '비번',

    database:'데이터베이스'

});

conn.connect();

 

 

 

if(!String.prototype.trim) {

  String.prototype.trim = function () {

    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');

  };

}

function addslashes(string) {

    return string.replace(/\\/g, '\\\\').

        replace(/\u0008/g, '\\b').

        replace(/\t/g, '\\t').

        replace(/\n/g, '\\n').

        replace(/\f/g, '\\f').

        replace(/\r/g, '\\r').

        replace(/'/g, '\\\'').

        replace(/"/g, '\\"');

}

 

var spider = new Spider({

    // How many requests can be run in parallel

    concurrent: 5,

    // How long to wait after each request

    delay: 0,

    // A stream to where internal logs are sent, optional

    logs: process.stderr,

    // Re-visit visited URLs, false by default

    allowDuplicates: false,

    // If `true` all queued handlers will be try-catch'd, errors go to `error` callback

    catchErrors: true,

    // Called when there's an error, throw will be used if none is provided

    error: function(err, url) {

 

console.log(err);

    },

    // Called when there are no more requests

    done: function() {

    },

 

    //- All options are passed to `request` module, for example:

    headers: { 'user-agent': 'node-spider' },

    //encoding: 'utf8'

encoding: null

});

 

var handleRequest = function(doc) {

 

// doc.res

var content = doc.$('div.con_inner').text().trim();

var title = doc.$('#head_title').text().trim();

var contentHTML = doc.$('div.con_inner').html();

var member =  doc.$('li#info_name').find('span.member').text().trim();

var PageUrl = doc.url;

if(title) title = addslashes(title);

if(member) member = addslashes(member);

if(content) content = addslashes(content);

if(contentHTML) contentHTML = addslashes(contentHTML);

if(content) {

 

// new page crawled

console.log('---시작---');

console.log(PageUrl); // page url

conn.query("insert into `_sc` set `member` = '"+member+"', `title` = '"+title+"', `content` = '"+content+"', `html_content` = '"+contentHTML+"', `url` = '"+PageUrl+"', `rdate` = now()");

console.log('---종료---');

}

 

    // uses cheerio, check its docs for more info

    doc.$('a').each(function(i, elem) {

 

        // do stuff with element

        var href = elem.attribs.href.split('#')[0];

        var url = doc.resolve(href);

 

if(url.indexOf('/cm_free/') > -1) { // 자게 주소 패턴이 있을경우만..

 

// crawl more

spider.queue(url, handleRequest);

}

    });

};

 

// start crawling

spider.queue('http://sir.kr/cm_free', handleRequest);

[/code]

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 3개

페이지는 어떻게 찾아 가나요?
크롤러 자체가 파싱하는 위치에 링크가 있다면 해당 링크를 찾아가게 되어있습니다.
[code]
doc.$('a').each(function(i, elem) {

// do stuff with element
var href = elem.attribs.href.split('#')[0];
var url = doc.resolve(href);

if(url.indexOf('/cm_free/') > -1) { // 자게 주소 패턴이 있을경우만..

// crawl more
spider.queue(url, handleRequest);
}
});
[/code]
이 부분이 해당 내용입니다.
감사합니다~

게시글 목록

번호 제목
17927
17926
17922
17921
17915
17910
17907
17892
17888
17879
17878
17874
17873
17872
17871
17870
17869
17868
17866
17865
17864
17863
17862
17859
17856
17845
17835
17834
17826
17823