ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js] node.js 크롤링 방지 우회하기(네이버 크롤링)
    개발/Javascript 2018. 11. 19. 23:52
    node.js 크롤링 방지 우회하기(네이버 크롤링).md

    웹 크롤링을 이용하는 프로젝트를 진행하다보면, 네이버, 구글, 다음과 같은 대형 포털사이트를 크롤링하여 정보를 얻는 경우가 많습니다.

    node.js환경에서 웹 크롤링 하기(cheerio-httpcli) https://hanswsw.tistory.com/6

    그런데, 원래 하던대로 크롤링을 해도, 원하는 결과값을 얻지 못할 때가 있습니다.

     

    물론 코드가 잘못됐거나, 크롤링할 selector을 잘못 지정했을 수도 있지만, 네이버같은 대형 포털사이트의 경우에는, 웹서버에서 크롤링 봇을 탐지해서 차단했을 가능성이 높습니다.

    네이버에서 차단된 경우, "검색 서비스 이용이 제한되었습니다."

    라는 문구가 보입니다.

     

    이러한 경우, 간단한 헤더 설정으로 크롤링 탐지를 우회할 수 있습니다.

    바로, 헤더에 User-agent 설정을 변경해주는 방법입니다.

     

    User-agent

    user-agent는 간단하게, 내가 이러이러한 접속환경을 가지고 이 웹에 접속한다는 의미를 가집니다. 그렇기 때문에, 핸드폰으로 접속하는 환경의 user-agent와, PC에서 Internet Explorer를 통해 접속하는 환경의 user-agent와, 크롬을 통해 접속하는 환경의 user-agent는 모두 다르게 됩니다.

     

    User-agent 확인하기

    https://www.whoishostingthis.com/tools/user-agent/

    에서, 간단하게 현재 자신의 user-agent값을 확인할 수 있습니다.

    또한, 크롬 개발자 도구의 Network 탭의 Request Headers를 통해서도, 현재 자신의 user-agent를 확인할 수 있습니다.

     

    크롤링 방지 우회하기

    이제, user-agent값을 현재 자신의 user-agent값으로 변경해서, 현재 자신의 정상적인 웹에서 접근한 것 처럼 위장을 해서, 크롤링 방지를 우회할 수 있습니다.

    꼭 자신의 user-agent값으로 변경할 필요는 없습니다,

    검색을 통해 얻은 아무 user-agent로 해도 가능합니다.

     

    이전 포스팅에서 시연한 node.js환경에서 cheerio-httpcli를 이용해서,

    크롤링 우회를 위한 user-agent헤더 설정후, 크롤링을 해보겠습니다.

    var client = require('cheerio-httpcli');
    
    let url = 'https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%ED%99%98%EC%9C%A8'; // ex) 네이버에서 '환율'을 검색한 화면
    var param = {};
    
    client.set('headers', {           // 크롤링 방지 우회를 위한 User-Agent setting
      'user-agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
      'Accept-Charset': 'utf-8'
    });
    
    
    client.fetch(url, param, function(err, $, res){
        if(err){
            console.log(err);
            return;
        }
    
        console.log($.html());
    
    });
    

     

    결과

    앞선 결과와 다르게, 정상적으로 html이 출력되는 것을 볼 수 있습니다.

     

    댓글

Designed by Tistory.