2007. 11. 14. 17:55
     

 01 이글루스에서 덧글 뽑기

원문 :  http://kkamagui.springnote.com/pages/377691

 

들어가기 전에...


 

 오늘로써 파이썬을 배운지 약 하루(24시간??)이 지났다. 파이썬이 아주 편리한 언어임을 뼈저리게 깨닫기에는 충분한 시간이었다. 그래서 내친김에 프로그램을 하나 만들었는데, 그것은 바로 @0@)/~!!! 이글루스에서 덧글 뽑기!!!

 

 간혹 덧글을 확인하러 이글루스에 들어가는데... 이것을 파이썬으로 대체해서 덧글만 뽑는 것이다. @0@)/~!!! 전에 비슷한 것을 VC++로 한적이 있는데... 상당히 긴 코드였다. 하지만.. 파이썬으로 했을때는... ㅠ_ㅠ... 아래 코드가 전부이다.

  1. # -*- coding: cp949 -*-
    import urllib
  2. # euc-kr Text를 utf-8의 형태로 바꾼다.
    def ConvUtf8( buffer ):
        uniText = unicode( buffer, "euc-kr" );
        return uniText.encode( "utf-8" );
  3. # utf-8 Text를 euc-kr의 형태로 바꾼다.
    def ConvEucKr( buffer ):
        uniText = unicode( buffer, "utf-8" );
        return uniText.encode( "euc-kr" );
  4. # 버퍼에서 각 부분을 자른다.
    def ExtractItem( buffer, startTag, endTag ):
        replyStart = ConvUtf8( startTag );
        replyEnd = ConvUtf8( endTag );
       
        #print "개별 추출 함";
  5.     try:
            startIndex = buffer.index( replyStart );
            endIndex = buffer[ startIndex : ].index( replyEnd );
        except:
            return [ buffer, "" ];
       
        if startIndex != -1 and endIndex != -1:
            endIndex = startIndex + endIndex;
            #print "찾음", startIndex, endIndex;
           
            reply = buffer[ startIndex : endIndex + len( replyEnd ) ];
            return [ buffer[ endIndex + len( replyEnd ) : ], reply ];
           
        else:
            #print "찾을 수 없습니다";
            return [ buffer, "" ];
  6.        
    # 메인 코드
    urlHandle = urllib.urlopen( "http://kkamagui.egloos.com" );
    buffer = urlHandle.read();
    # 덧글 블럭만 뽑는다.
    [ buffer, extractBuffer ]= ExtractItem( buffer,"<DIV CLASS=MNTTL>최근 등록된 덧글</DIV>",
                                "<CENTER>");
    #print extractBuffer;
  7. # 개별 덧글을 다 찾는다.
    i = 1;
    while 1:
        print "";
        print i;
  8.     reply = "";
        [ extractBuffer, reply ] = ExtractItem( extractBuffer, "<a href=", "</div>" );
        if( reply == "" ):
            break;
        #print reply;
       
        # 덧글은 아래와 같이 되어있다.
        #<a href="http://kkamagui.egloos.com/3287761#9763213">
        #네 감사합니다 ^^</a><br/><span class="SMALL">by kkamagui at 07/20</span>
        #<br/><div style="margin:12px;"></div>
        item = "";
        [ reply, item ] = ExtractItem( reply, "http", '">' );
        item = item[ : -2 ];
        item = ConvEucKr( item );
        print "PageNumber####", item;
  9.     [ reply, item ] = ExtractItem( reply, "", "<" );
        item = item[ : -1 ];
        item = ConvEucKr( item );
        print "Contents###", item;
  10.     [ reply, item ] = ExtractItem( reply, 'SMALL">', "</span" );
        item = item[ 7 : -6 ];
        item = ConvEucKr( item );
        print "Writer###", item;
        i = i + 1;
  11. i = input( "끝입니다. 아무키나 눌러주세요" );

 뭐 간단히 보면 HTML 특정 부분 파싱이 전부이다. 약간 주의할 점은 utf-8 형태로 HTML 코드가 전송되는데, 이것을 콘솔 화면에 적당히 출력하기위해서 euc-kr로 바꿔주는 부분이 조금 특이하다.

 

 이로써 덧글을 확인하러 블로그에 들어가지 않아도 되게 되었다. ㅠ_ㅠ

 

파이썬 만쉐이 ㅠ0ㅠ)/~!!!

 

이 글은 스프링노트에서 작성되었습니다.


Android App

Posted by 호기심 많은 kkamagui(까마귀, 한승훈)

댓글을 달아 주세요