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

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

· 9년 전 · 3948 · 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]
이 부분이 해당 내용입니다.
감사합니다~

게시글 목록

번호 제목
17316
17315
17313
17312
17305
17304
17298
17294
17291
17285
17284
17279
17272
17271
17270
17262
17255
17248
17241
17238
17236
17220
17217
JavaScript 회원가입 2
17216
17214
17207
17205
17203
17201
17198