01 이글루스에서 덧글 뽑기
원문 : http://kkamagui.springnote.com/pages/377691
들어가기 전에...
- 이 글은 kkamagui에 의해 작성된 글입니다.
- 마음껏 인용하시거나 사용하셔도 됩니다. 단 출처(http://kkamagui.tistory.com, http://kkamagui.springnote.com)는 밝혀 주십시오.
- 기타 사항은 mint64os at gmail.com 이나 http://kkamagui.tistory.com으로 보내주시면 반영하겠습니다.
- 상세한 내용은 책 "64비트 멀티코어 OS 구조와 원리"를 참고하기 바랍니다.
오늘로써 파이썬을 배운지 약 하루(24시간??)이 지났다. 파이썬이 아주 편리한 언어임을 뼈저리게 깨닫기에는 충분한 시간이었다. 그래서 내친김에 프로그램을 하나 만들었는데, 그것은 바로 @0@)/~!!! 이글루스에서 덧글 뽑기!!!
간혹 덧글을 확인하러 이글루스에 들어가는데... 이것을 파이썬으로 대체해서 덧글만 뽑는 것이다. @0@)/~!!! 전에 비슷한 것을 VC++로 한적이 있는데... 상당히 긴 코드였다. 하지만.. 파이썬으로 했을때는... ㅠ_ㅠ... 아래 코드가 전부이다.
- # -*- coding: cp949 -*-
import urllib - # euc-kr Text를 utf-8의 형태로 바꾼다.
def ConvUtf8( buffer ):
uniText = unicode( buffer, "euc-kr" );
return uniText.encode( "utf-8" ); - # utf-8 Text를 euc-kr의 형태로 바꾼다.
def ConvEucKr( buffer ):
uniText = unicode( buffer, "utf-8" );
return uniText.encode( "euc-kr" ); - # 버퍼에서 각 부분을 자른다.
def ExtractItem( buffer, startTag, endTag ):
replyStart = ConvUtf8( startTag );
replyEnd = ConvUtf8( endTag );
#print "개별 추출 함"; - 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, "" ]; -
# 메인 코드
urlHandle = urllib.urlopen( "http://kkamagui.egloos.com" );
buffer = urlHandle.read();
# 덧글 블럭만 뽑는다.
[ buffer, extractBuffer ]= ExtractItem( buffer,"<DIV CLASS=MNTTL>최근 등록된 덧글</DIV>",
"<CENTER>");
#print extractBuffer; - # 개별 덧글을 다 찾는다.
i = 1;
while 1:
print "";
print i; - 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; - [ reply, item ] = ExtractItem( reply, "", "<" );
item = item[ : -1 ];
item = ConvEucKr( item );
print "Contents###", item; - [ reply, item ] = ExtractItem( reply, 'SMALL">', "</span" );
item = item[ 7 : -6 ];
item = ConvEucKr( item );
print "Writer###", item;
i = i + 1; - i = input( "끝입니다. 아무키나 눌러주세요" );
뭐 간단히 보면 HTML 특정 부분 파싱이 전부이다. 약간 주의할 점은 utf-8 형태로 HTML 코드가 전송되는데, 이것을 콘솔 화면에 적당히 출력하기위해서 euc-kr로 바꿔주는 부분이 조금 특이하다.
이로써 덧글을 확인하러 블로그에 들어가지 않아도 되게 되었다. ㅠ_ㅠ
파이썬 만쉐이 ㅠ0ㅠ)/~!!!
이 글은 스프링노트에서 작성되었습니다.
'프로그래밍(Programming) > 파이썬(Python)' 카테고리의 다른 글
하드디스크를 돌면서 특정한 확장자를 가진 파일을 지워주는 코드 (0) | 2007.12.22 |
---|---|
Python 공부에 도움이 되는 사이트~!!! PDF 파일 무료제공~ ^ㅡ^ (4) | 2007.11.22 |
파이썬(Python)으로 GPU 컨트롤하기 (0) | 2007.11.16 |
04 진보된 DLL 디스어셈블러 만들기 (0) | 2007.11.14 |
03 DLL 디스어셈블러 만들기 (2) | 2007.11.14 |