ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 지마켓에서 판매자 정보 긁어오는 방법, 자바스크립트에 익숙해져야..
    파싱의 추억 2012. 9. 22. 12:57

    지마켓에서 개인정보를 가져오는 방법을 아는것과 그 개인정보를 실제로 어떻게 사용하는지는 다른 문제다. 칼을 요리에 쓸수도 있지만, 사람을 해하는데 쓸 수도 있기 때문이다. 그렇다고 이 세상 모든 칼이 문제일 수는 없다. 칼의 잘못이 아니라, 칼을 사용하는 사람의 문제다. 기술은 영역이 없어야 한다. 개발된 기술의 사용이 어떻게 할까는 인문학의 역활이다. 



    지마켓 하단에도 스크래핑을 하지마라고 경고하고 있다. 문구가 좀 애매하긴 하다. 상업적이 아니라면, 스크래핑이 가능하다는 말일까? 논의는 넘어가고, 실제 구현을 보자. 



    지마켓의 상품 리스트에 보면, 판매자 정보가 있다. 판매자 정보에는 전화번호와 이메일등등 일종의 개인정보가 포함되어 있다. 




    지마켓의 상세페이지를 파싱해서 긁어오는 소스는 간단하다.



    $txt=file_get_contents($url);

    $ex2=explode('<strong>G마켓 구매 안전 서비스</strong>',$txt);

    $txt=$ex2[0];

    $rex='/<th scope="row">(.*?)<\/th>/is';

    //$rex="/<th scope=\"row\">([^<]*)<\/th>/is";

    preg_match_all($rex, $txt,$o);


    $rex='/<td[^>]*>(.*?)<\/td>/is';

    //$rex="/<th scope=\"row\">([^<]*)<\/th>/is";

    preg_match_all($rex, $txt,$oo);


    for($i=0;$i<sizeof($o[1]);$i++){

      $r[$o[1][$i]]=$oo[1][$i];

    }



    print_r($r); 을 해보면, 판매자 정보가 배열로 쭉 나온다.여기까지는 별로 특이한 것이 없다.달을파는아이가 지마켓을 예제로 사용한 이유는 다른데 있다.




    실제 판매자명은 위와같이 되어 있다. 자바스크립트로 인코딩되어 있어서, 단순히 소스보기를 해서는 알아볼 수가 없다. 자바스크립트 함수 decode64han이 인코딩을 하는 역활을 하는것같다. 소스를 면빌치 뒤져서 decode64han  함수를 찾아야한다. 


    소스에서 decode64han 함수를 찾기 위해서, 모든 js 파일을 눌러본다. 



    28번째줄에 가면, jsFlashEncode.js 라는 파일이 있다. 그 안에 decode64han 함수가 있었다.





    드디어 찾았다. 이 함수의 역활을 반대로 돌리면, 암호같은 저 문구가 보이겠지? 머리가 복잡해 졌다. 우여곡절끝에 디코딩하는 함수를 만들었다. 






    function decodeGmarket($str){

    return Unescape(base64_decode($str));

    }

    function Unescape($str){

        return urldecode(preg_replace_callback('/%u([[:alnum:]]{4})/', 'UnescapeFunc', $str));

    }

    function UnescapeFunc($str){

        return iconv('UTF-16LE', 'UTF-8', chr(hexdec(substr($str[1], 2, 2))).chr(hexdec(substr($str[1],0,2))));

    }



    두단계를 거쳐서 디코딩을 해야했다. 사용법은 간단하다. decodeGmarket($str) 에 인코딩된 글자를 넣으면 된다.


    지마켓을 소개한 이유는, 요즘 사이트들은 자바스크립트와 아작스를 엄청 많이 쓴다는 점이다. 그 구조를 파악하지 않으면, 사이트 파싱이 쉽지가 않다. 재미있는건, 그 구조를 파악하면 의외로 쉽게 파싱도 가능하다. 특히, 아작스로 된 사이트들은 json 이라는 데이타 형태로 깔끔하게 정리된 경우가 많다. 그 json 파일만 찾아낸다면, 어렵게 정규식을 써가면서 사이트 긁어올 필요가 없다. 아작스로 된 사이트 분석 예제는 다음에 하기로 하고.. 


    보안서버의무화 http://money.web2r.net/9762050 를 시행하고, 언론에서는 개인정보 누출에 민감하게 반응 한다. 하지만, 의외로 개인정보는 쉽게 노출된다. 구지 해킹을 통해서, 서버를 뚫고 들어가는 위험한 짓을 하지 않아도 널렸다. 판매자이기 때문에 당연히 공개해야 된다고 할 수도 있지만, 판매자도 결국 사람이고, 사람이면 물건을 사야한다. 결국 판매자지만, 다른사람에게는 구매자다. 온라인에 올라온 이상 어떤 형태로든 개인정보는 퍼져나갈수 밖에 없다. 완벽한 보안이란 존재할수가 없다. 중요한건, 이런 사실을 인식하고 있냐 없냐는 점이다. 사실을 받아 들이고, 적응해 나가는게 진화론적인 생물체의 바람직인 태도가 아닐까? 



    사이트 파싱에 궁금한점이나, 의뢰는  로 주세요 ^^





    댓글

달을파는아이 @ nalab.kr