파싱해서 DB로 저장해보기. > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

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

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

본문

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

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

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

 


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);
추천
2

댓글 3개

크롤러 자체가 파싱하는 위치에 링크가 있다면 해당 링크를 찾아가게 되어있습니다.

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);
		}
    });

이 부분이 해당 내용입니다.
전체 14
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT