ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파싱강의 3강, 파싱을 위한 php의 기초중의 기초
    파싱의 추억 2016. 4. 18. 12:26


    본 파싱강의는 나수연 파싱랩 http://nalab.kr/index.php?mid=parsing 에서 진행하던 강의를 재편집한것입니다. 저작권은 "달을파는아이"에게 있으며, 본인의 글인것처럼 퍼가시면 큰일납니다. 퍼가실땐 필히 출처를 남겨주세요. 



    1,2강에서 파싱에 대해서 개념을 잡았습니다. 이제 조금씩 파싱의 안으로 들어가게 될텐데요. 그전에 PHP에 대해서 약간은 알고 들어가야합니다. 까막눈으로는 진도가 나갈 수가 없으니까요. 정말 php에서 기본중에 기본인 내용입니다. 파싱강의를 진행함에 있어서, 제일 걱정되는 부분입니다. php만 해도 내용이 너무 방대합니다. 본 강좌가 php 플그래머를 만들려는게 목표가 아닙니다. 인터넷에 php 강좌가 많기도 하기 때문에.. 파싱에 필요한 부분만 간략하게 설명하고 넘어갑니다. 


    파싱을 하려면 , 사실 PHP보다 HTML에 통달해야합니다. HTML가 암덩어리면, php는 매스라고 할 수 있습니다. 매스를 대기전에 암덩어리를 잘 관찰해야 합니다. 그래야 정확하게 짤라낼 수 있겠죠? 하지만, HTML까지 이야기하기에는 무리라서, HTML은 파싱강좌 진행하면서 살짝살짝 건들겠습니다.



    PHP는 프로그래밍 언어입니다. 





    프로그래밍 언어는 별게 아닙니다. 미국사람과 이야기하려면, 미국사람이 한국말을 할 수 있거나 , 우리가 영어를 할 수 있어야 합니다. 프로그래밍 언어는 컴퓨터와 대화하기 위한 언어입니다. 컴퓨터가 사람말을 할리만무하니, 우리가 컴터말을 배워서 말해줘야 하는거죠. 이런 프로그래밍 언어들은 수없이 많습니다. 자바,C,ASP,닷넷,파이선,루비,포트란,GO 등등. 그 중에서 PHP를 선택한 이유는 제가 할 수 있는게 그거 밖이라서 입니다.  어떤 언어를 사용하든 상관없습니다. 중요한건 언어가 아니라 언어로 하고자 하는 말이니까요. 영어가 중요한게 아니라, 그 영어로 어떤 내용을 말하느냐가 더 중요한 것처럼 말입니다. 제가 할 수 있는게 PHP뿐이니 어쩔수 없네요. 따라오셔야 겠습니다. 어려워 보이지만 쉽습니다. 뭐든 처음이 어렵지 익숙해지면, 생각하지 않고 척척 하게 되잖아요. 

    php는 <? 로 시작해서 ?>로 끝납니다. 
    메모장을 열든, EDIT PLUS를 열든 열어서 <? echo “나름수익모델연구소 만세”; ?>라고 입력합니다. 
    그리고, 크롬을 열어보면 화면에 “나름수익모델연구소 만세” 라고 뜰껍니다. 


    아! 여기서 잠깐. 


    [!] 이 강좌의 공식 웹브라우저는 구글에서 나온 크롬입니다. 파싱을 위해서는 크롬이 젤 편합니다. 이유는 나중에 알게 될겁니다. 

    [!] 이 강좌의 공식 웹서버는 리눅스+아파치웹서버 입니다. 자기 컴터에 xampp라는 웹서버를 설치해도 되고, 간단하게 호스팅을 써도 됩니다. 그게 머냐구요? 여기서 이러시면 곤란합니다.



    원리를 정리하면,  메모장에서 입력한 코드는 아파치웹서버가 번역을 해서 , 크롬에게 결과물을 던집니다. 크롬은 화면에 결과물을 뿌려주는거죠. (엄밀히 말하면 조금 다르긴 하지만.. 대충 이래요) 크롬에서는 우리가 만든 프로그램 코드는 보이지 않습니다. 우리만 코드를 볼 수가 있죠.


    <? echo “나름수익모델연구소 만세”; ?>

    이 코드를 찬찬히 볼까요?


        1.    <? 로 시작해서 ?>로 끝났습니다.
        2.    echo 라는 것은 “메아리”라는 뜻이죠. echo 뒤에 나오는 “ ” 사이의 글자를 화면에 소리쳐라는 명령어입니다. 크롬에서는 echo는 안나오고 “ ”사이에 있는 <나름수익모델연구소 만세> 만 나옵니다.
        3.    명령어의 맨 마지막은 항상 ; 로 끝납니다. 이게 없으면, 크롬에서 빈화면만 나옵니다. 컴터가 말을 못알아 먹은거죠. 오류입니다. "당췌 니가 먼소리하는지 모르겠다" 라고 하는겁니다. 컴터는 정말 정확하게 말해줘야 알아 먹습니다. 

    기본 php는 항상 이런식입니다. 한글이 가나다라마바사... 라는 단순한 글자가 기본이지만, 그 글자들을 조합을 어떻게 하느냐에 따라 시도 되고, 소설도 되고, 이렇게 멋진 강좌도 됩니다. 저 단순한 명령어들을 이렇게 저렇게 조합하면  어떤 사이트라도 파싱해서 가져올수 있게 되는거죠.



    파싱할때 주로쓰는 php 함수들 





    php는 함수의 언어입니다. 설리가 있는 fx가 아니라, 프로그래밍 언어에서 말하는 함수입니다. 수학시간에 배웠던 함수와 역활은 같습니다. 갑자기 나온 "수학"이라는 단어에 움찔하지 마세요. 함수에 어떤 값을 집어 넣으면, 지지고 뽁고 해서 새로운 값이 튀어 나옵니다. 밥을 먹으면 똥이 나오는것 처럼 말이죠. 우리몸도 함수인거죠. 

    바로 위에서  나왔던 echo 명령어도 사실 함수입니다. 

    <? echo “나름수익모델연구소 만세”; ?>

    에서 밥은 “나름수익모델연구소 만세” 이고, 똥은 크롬에서 나오는 “나름수익모델 연수고 만세” 가 되겠죠. 

    파싱에서 많이 쓰는 file_get_contensts 로 다시 설명합니다.

    <? echo file_get_contents(http://nalab.kr); ?>

    메모장에 위 코드를 넣고, 크롬에서 보세요. 나수연 홈페이지가 뜰껍니다. 
    설명하자면, “http://nalab.kr” 은 밥이고, 나수연 홈페이지는 똥입니다.(응?) 엄밀히 말하면, 나수연 홈페이지 html 소스가 똥입니다. (응??)





    file_get_contents 라는 명령어는 url을 받으면, 해당 홈페이지의 html 소스를 돌려주는 함수입니다. 파싱의 제일 기본은 해당 홈페이지의 html 을 일단 긁어와야 합니다. 그래야 원하는 데이타만 쏙 빼낼 수 있으니까요.

    저 file_get_contents 라는 함수는 서버의 설정에 따라 막힌 경우가 있습니다. 이때, 유명한 스누피를 가져다가 쓰게 됩니다. 그 스누피라는 프로그램은 사실은 curl 이라는 php 함수를 쓰기 편하게 만들어 놓은 것 뿐입니다. curl  이라는 함수를 쓰면 똑같은 결과를 만들 수 있죠. 유사하게 fsocketopen 이라는 함수도 있습니다. 이것도 상대방 사이트의 소스를 긁어옵니다. 다양한 함수를 입맛에 맞게 골라서 먹으면 됩니다. 그럼 똥이 나오겠죠. 

    젤 쓰기 편한게 file_get_contents이기 때문에, 이걸로 먼저 시도를 해봅니다. 막혔거나, 오류가 난다면 curl을 사용해보구요. 안된다면  최종으로 fsocketopen으로 시도를 해봅니다.왠만한 사이트는 이 3가지로 90%는 되구요. 가~~~끔, 안되는 경우가 있는데요. 바로 오늘 의뢰받은 사이트가 그랬었는데요.  사이트 구조를 완전 꼬아 놔서, 분석한다고 애를 먹었네요. 애를 먹어도 안되는 경우는 없어요. 



    HTML 소스를 가져왔으면, 소스를 분해해 내야겠죠. html이라는 암덩어리를 매스로 잘라내야합니다. 
    php에는 문자관련 함수들이 많습니다. 그중에 가장 많이 쓰는 녀석들이 아래 정도 입니다. 

    str_replace(“만세”,”이뻐”,”나름수익모델연구소 만세”);
    이걸 실행하면, “나름수익모델연구소 만세”가 “나름수익모델연구소 이뻐”로 바뀝니다.

    preg_match_all 
    정규표현식이라는 녀석이 있는데요. 나중에 이야기 하겠지만.. 
    이걸로 문자를 뽑아 낼때 쓰는 함수입니다.

    explode(“-“,”2013-09-15”);

    “2013-09-15” 라는 글자를 -로 분리 합니다. 저 명령어를 치면, - 를 기준으로 분리되서, 2013과 09 그리고 15로 분해됩니다.

    substr(“나름수익모델연구소 만세”,2,4);
    나름수익모델연구소 만세라는 문자열에서 2번째 글짜부터 4글자를 뽑아냅니다. 유용하겠죠?

    strip_tags(“<b>나수연은 나름수익모델연구소</b>”);
    php 함수명을 잘보면, 대충 머하는 녀석인지 감이 잡힐때가 많습니다. 이 명령어는 strip = 벗긴다 . tags=태그들 . 즉, 태그들을 홀라당 벗겨버리는 명령어입니다. 위에 보면 내용중에 <b>  라는 html 태그로 둘러쌓여 있죠. 이것들이 자동으로 지워집니다. 결국 글자만 남는거죠. 파싱할때, 쓸데없는 태그들을 한방에 지울때 유용합니다. 

    더 있지만, 저는 이 정도만 있어도 왠만한건 다 됩니다. php는 함수가 무진장 많습니다. 아마 생각하는 거의 모든게 있을겁니다. 구글에서 php 함수라고 검색해보면, 쭈~~~욱 나와요. 함수명과 설명을 대충 보면, 어떤 역활을하는지 감이 와요. 원하는걸 갖다 쓰기만 하면됩니다.

    중요한건, 어떤 밥을 먹으면 어떤 똥을 싸는지를 아는겁니다. 위 함수들이 파싱에서 도데체 어떻게 써먹어 지는지는 차차 알게 됩니다. 




    개발은 결국 if와 for





    프로그램을 하는 이유는 단순합니다. 반순반복 노가다를 컴터가 대신하게 하기 위해서입니다. 수억번의 반복 노동을 시켜도, 컴터는 아무런 불만도 없고 불량도 없습니다. 인간은 10개만 똑같은 짓을 해도 금세 짜증이 나고 실증나고 실수가 나오죠. 프로그램은 결국 for 와 if만 있으면 됩니다. 따지고 보면 그게 답니다. 

    for라는 명령어가 반복노가다를 시킵니다. 100번이고 1000번이고 같은 짓을 시킬수가 있죠. 파싱에서는 없어서는 안될 녀석입니다. 게시판같은걸 보면, 여러줄이 계속 반복됩니다. 그때  for로 한줄 한줄 돌리는겁니다. 사람이 게시판글을 1000번 클릭하는걸 대신 1000번 클릭하게 만들때 필요합니다.  

    if라는 명령어는 영어로는 “만약 ..한다면..” 이라는 뜻입니다.프로그램 기능도 똑같습니다. 만약...라면 ***을 해라.라고 지시를 내리죠. 역시나 파싱에서는 없어서는 안될 녀석입니다. 

    고수들은 이 두개의 명령어만 있어도 별의 별걸 다 만들어냅니다. 그 만큼 핵심적이고 중요하죠. 중요성에 비해 사용법은 무척이나 간단합니다.


    for 문 

    기본 형태는 이렇습니다. 

    for($i=0;$i<=100;$i++){
        $sum=$sum+1;
    }
    echo $sum;

    이런 문자들을 처음보면, 꼬불꼬불한 아랍어를 보는것같은 기분이 들곤 하는데요. 마음을 가다듬고, 찬찬히 보면 별거도 없습니다.

    한글로 번역해봅니다. 

    돌려봐라 (for) $i 가 100이 될때까지 $sum이라는 녀석에 +1을 해라. 
    마지막으로 $sum이 얼마인지 화면에 뿌려라 (echo)

    즉, 위의 프로그램은 1에서 100까지 합계를 구하는겁니다.
    간단하죠? ㅋㅋ

    그냥 외우면 됩니다. for문은 저렇게 생겼다고.. 



    if 문 

    if($a==1){
        echo “1이다”;
    }else if($a==2){
        echo “2이다”;
    }else{
        echo “1도 2도 아니다”;
    }

    이것도 한글로 번역해봅니다. 

    만약 $a가 1이면 화면에 “1이다”라고 뿌리고
    만약 $a가 2면 화면에 “2이다” 라고 뿌려라.
    둘다 아니면, “1도 2도 아니다” 라고 뿌려라.

    간단하죠? ㅋㅋ 
    그냥 외우면 됩니다. if문은 저렇게 생겼습니다. 


    생긴건 간단한데, 저걸 실제로 적용하려면 머리를 좀 굴려야 겠죠? ㅋㅋ 
    생각하는 방식을 아날로그적인 인간의 방식에서 디지털적인 컴터의 방식으로 바꿀필요가 있습니다. 



    PHP와의 소개팅은 이정도로 마무리합니다. 더 깊이 알고 싶으면, 책을 한권 사보시던지.. 인터넷을 열심히 뒤지면 됩니다. 어렵지 않아요. 우리는 더 어려운 한국말도 하는걸요.





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





    댓글

달을파는아이 @ nalab.kr