노드 cheerio-httpcli를 사용한 기사제목 크롤링 해보기

2019. 6. 27. 12:04크롤링

크롤링해보기 전에 먼저 robots.txt를 확인해 보았는데 모든 경로가 다 허용이 되어있어서 크롤링하고 올려봅니다. 문제가 생길 시에 삭제하겠습니다.

hiphople.com robots.txt

 

평소 자주 보는 힙합엘이의 국외 뉴스를 크롤링해보았습니다.

 

노드 js에 cheerio-httpcli모듈과 오라클 db에 저장해 보기 위해서 oracledb모듈을 사용했습니다.

 

결과물 사진

 

크롤링 소스코드

var client = require('cheerio-httpcli');
var oracledb = require('oracledb');
oracledb.autoCommit= true;

for(var j = 1; j<10;j++){
    let url = 'http://hiphople.com/index.php?mid=news_world&page='+j; 
    client.fetch(url, null, function (err, $, res, body) {
        for(var i = 0; i<10;i++){
            (function() { 
                var newsbody = $('.wz-item-content');
                var newsSpan = $(newsbody[i]).find('span');
                var newsTitle = $(newsSpan[0]).html(); // 타이틀
    
                var imageBody = $('.thumbwrap');
                var imageDiv = $(imageBody[i]).find('div');
                var imageLink = $(imageDiv).attr('style').split('\'')[1];
    
                var urlCr = $('.wz-item');
                var href = $(urlCr[i]).find('a').attr('href');
                var newshref = 'http://hiphople.com'+href;
    
                oracledb.getConnection({
                    user          : "increpas",
                    password      : "increpas",
                    connectString : "localhost/xe"
                },
                    function (err, connection) {
                
                        if (err) {
                            console.error(err.message);
                            return;
                        }
                
                        connection.execute("insert into newstable VALUES(  ( select nvl( max(newsNo)+1,1 ) from newstable),:newsImageLink,:newsTitle,0,sysdate,:newshref )"
                            , [imageLink,newsTitle,newshref],
                            function (err) {
                                if (err) {
                                    console.log(err.message);
                                    return;
                                }
                                connection.commit(function (err) {
                                    if (err) {
                                        console.log(err.message);
                                        return;
                                    }
                                })
                            });
                    });
            }(i));
        
        }
    
    });
}