파이썬 튜토리얼을 대충 훓어본 후, 맨 처음 해 본것은
기존에 쉘 스크립트와 루비를 이용해 만든 유틸리티였습니다.

이 유틸중에 URL 주소로 부터 파일을 다운로드 하는 부분이 있는데
이 부분에 대해서 이야기 해볼까 합니다.

먼저, URL 주소로 부터 파일을 다운로드 받는 방법 입니다.
import urllib

URL = URL주소
urllib.urlretrieve(URL, URL.split('/')[-1])

요렇게 쓰면 파일을 다운로드 할 수 있습니다.
하지만 여기에서 문제가 발생했습니다. 어떤 서버내의 존재하지 않는 파일에 대해서
다운로드를 시도 할 때 exception 이 발생하지 않습니다.
구글님께 물어본 결과 저 현상이 당연하다는 글을 볼 수가 있었습니다.
왜냐하면 존재하지 않는 파일에 대해서 다운로드를 하게 되면
해당 파일이 아닌 다른 내용을 수신하게 되며, 네트웍으로 부터 정상적인
응답을 받았으므로 exception 이 아니라는 것입니다.

예를들면 http://www.naver.com/sdfa.jpg 파일을 위 코드를 사용하여 다운로드를 하게 되면
sdfa.jpg 라는 파일이 생성되며, 아무런 exception 이 발생하지 않습니다.
하지만 sdfa.jpg 라는 파일을 텍스트 에디터로 살펴보면 다음과 같습니다.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL /sdfa.jpg was not found on this server.<P>
</BODY></HTML>

자, 그렇다면 어떻게 하면 다운로드 하려는 파일이 없다는 것을 알 수 있을까요?
머.. 여러 방법이 있겠지만, 제가 찾아낸 방법은 다음과 같습니다.
file = urllib.urlopen(URL)
   try:
       if file.headers.get("content-length") == None:
           raise
       else:
           file.close()
           urllib.urlretrieve(URL, URL.split('/')[-1])           
   except:
      (예외처리...)

이상 어제 삽질의 보고서였습니다. (--)(__)
반응형

설정

트랙백

댓글