13. 절대 경로와 상대 경로 (문자열 슬라이싱).
이전 포스팅에서는 짤방이 첨부된 게시물의 URL주소를 긁어냈었다.
이제는 게시물 페이지에서 짤방과 움짤을 저장하는 일만 남았다.
게시물 페이지 주소를 살펴보면 위 사진처럼 'http://~'로 시작하는 절대경로로 표시되어 있거나
아래처럼 'http://~'로 시작하는 일련의 주소부분없이 상대 경로로 표시되어 있다.
이때는 웹서버 주소를 기준으로 하는 상대 경로 이다.
아래 사진의 /board/view/?id=kimsohye&no=441563&page=1 은
http://gall.dcinside.com/ 을 기준으로 하는 상대 경로이다.
그러니 이런 경우에는 기준이 되는 웹서버 주소 http://gall.dcinside.com를 붙혀서 사용하도록 하자.
눈으로야 http://로 시작하면 절대 경로, 그렇지 않으면 상대 경로라고 구분했지만
코드로 로직을 구현하고 이를 갖고 짤방을 저장을 해야 의미가 있다.
그래서 URL이 상대 경로인지 절대 경로인지는 어떻게 구분할까?
게시물 페이지 주소라고 긁은 URL이 상대 경로인지 절대 경로인지 구분을 해야
웹서버 주소를 붙혀서 사용할 것인지 긁은 그대로의 주소를 사용할 것인지 결정할 것이다.
먼저 단순하게 구현해보기 위해 눈으로 구분한 과정을 그대로 코드로 구현해보자.
절대 경로일때 문자열의 첫 4글자는 'http' 로시작하고 상대 경로는 그렇지 않았다.
파이썬의 문자열 함수 중 슬라이싱 관련한 함수들을 활용해 다음과 같이 구현해 볼 수도 있지 않을까?
배열의 특정 인덱스에 저장된 데이터가 우리가 찾는 데이터 인지 비교 하도록 코드를 구현한다.
- 0번째부터 4번째 데이터의 바로 전까지의 데이터를 잘라서 리턴한다. 이를 'http' 혹은 '/boa'와 비교한 결과.
상대 경로라면 기본 웹서버 주소(여기서는 'http://gall.dcinside.com")를 붙히도록 한다.
절대 경로와 상대 경로를 구분하고 기본 웹서버 주소를 붙히는 코드를 지금까지 짰던 코드에 반영해보면 다음과 같다.
사실 이렇게 단순하게 처리할 수도 있지만 조금 더 유연하고 세련되게 처리해보자면
파이썬의 re 모듈을 이용해 정규표현식으로 처리할 수도 있다.
상대 경로는 URL 유효성 체크에서 유효하지 않은 URL으로 처리된다.
그래서 URL의 유효성을 체크하는 정규표현식을 만들고
이걸 바탕으로 절대 경로인지 상대 경로인지 구분하는 것이다.
이 부분은 다음에 다시 해보도록 하고,
위에서 만든 절대 경로와 이전 포스팅에서 사용했던
urllib.request.Request, urllib.request.urlopen 함수를 이용해서 게시물 페이지를 요청하자.
25 line 에 break는 주석에 남겼듯이 임시로 넣어 두었다.
일단은 첫번째 게시물 페이지를 요청하고 더 이상의 다른 게시물 페이지를 요청하지 않은체 loop가 종료된다.
14. 파이썬 이미지를 다운로드 받아 저장하기.
김소혜 갤러리 게시판 페이지에서 게시물 페이지 URL을 찾아냈던 것 처럼
게시물 페이지에서도 이미지를 다운로드할 수 있는 URL을 찾아야 한다.
웹 브라우저에서 이미지가 보이는 것도 http 통신을 통해서 요청하고 응답하는 과정이다.
웹 클라이언트(웹브라우저)가 웹서버 안 어딘가에 위치하고 있는 이미지의 위치를
웹서버에 요청하면 웹서버는 그에 해당하는 리소스를 클라이언트로 응답한다.
웹 브라우저가 찾아낸 이미지 URL을 우리도 찾아서 웹서버에 요청하고 응답을 받아 파일로 저장하기만 하면 되는 것이다.
이 과정은 다음 게시물에서 계속 진행하도록 하겠다!
'python > beautifulSoup' 카테고리의 다른 글
파이썬(python) - 품절 상품의 입고 여부를 확인 해보자(Nike-Uptempo) (4) | 2017.04.30 |
---|---|
파이썬(Python) - 게시물 페이지에서 이미지를 다운받아 저장하기. (19) | 2016.11.21 |
[python] BeautifulSoup 에서 UnicodeEncodeError Exception(예외), 특히 cmd에서 cp949 문제. (0) | 2016.08.23 |
파이썬(Python) - beautifulSoup 으로 html 파싱 (2). 그전에 크롬의 개발자 도구로 a태그 찾아보기. (7) | 2016.08.20 |
파이썬(Python) - beautifulSoup 으로 html 파싱 (17) | 2016.07.16 |