반응형

6. 실제로 게시판을 긁어보자. (ioi 김소혜 갤러리)


대부분의 사람들은 디씨 인사이드가 어떤 곳인지, 김소혜가 누구인지 알것이라 생각하지만 

그래도 혹시나 싶어 간략하게 밝힌다.
- 김소혜는 ioi 멤버 중 한명이다.

- 디지털 카메라 커뮤니티 사이트 '디씨 인사이드(DC INSIDE)'에는 주제별(인물별)로 갤러리가 있으며 

타 사이트에서 게시판과 동일한 역할을 한다.

- 이번에는 디씨 인사이드에 김소혜 갤러리의 웹페이지를 요청할 것이다.


앞서 파이썬을 이용해서 http 통신을 주고 받는 과정은 매우 간단했다.

(Request 객체를 만들고 urlopen 메소드를 호출했을 뿐이었다!)


http 프로토콜로 통신을 하면서도 http 프로토콜이 어떤 스펙과 과정을 거치는지 알 필요도, 찾아볼 필요도 전혀 느끼지 못했다.

조금 과장해서 http 프로토콜 존재 그 자체를 모르고도 사용할 수 있을 정도였다.

크롬이나 익스플로러 등 웹브라우저를 사용하면서 

주소창에 http://www.daum.net 혹은 http://www.naver.com 등의 웹페이지 URL을 입력해 사용하면서도

URL 가장 앞에 기술되어 있는 http://가 어떤 의미를 갖는지 알필요가 없었듯이 말이다.


이제 김소혜 갤러리 페이지를 요청해보도록 하자.

이전의 소스에서 url 주소를 김소혜 갤러리의 url 주소로 바꾸어주고

http header는 일단 아무런 설정없이 사용하자.




:response_basic.html 를 실행 화면.


웹브라우저에서 response_basic.html 를 실행하면 위와 같이 응답받은 내용이 표시된다.

하지만 웹 브라우저가 화면에 표시하는 결과는 그다지 중요하지 않다.

지금부터 필요한 것은 웹 서버에서 응답받은 그대로의 html 데이터이다.


웹 브라우저를 사용하지 않고

response_basic.html 파일을 메모장이나 평소 애용하는 텍스트 에디터에서 열어보자. 

웹 브라우저로 열어서 소스보기를 실행해도 된다. 

보통 우클릭하면 소스보기 메뉴가 있을 것이다.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>김소혜 갤러리</title>

<meta name="content-language" content="kr">

<meta http-equiv="imagetoolbar" content="no" />

<meta name="google-site-verification" content="8_SyZg2Wg3LNnCmFXzETp7ld4yjZB8ny17m8QsYsLwk" />

<meta name="robots" content="ALL">

<meta name="description" content="국내방송2, 김소혜, kimsohye community portal dcinside">

<meta name="title" content="김소혜 갤러리">

<meta name="author" content="">

<!-- S : Facebook Open Graph Meta Tag -->

<meta property="og:image" content="" />

<meta property="og:url" content="http://gall.dcinside.com/board/lists/?id=kimsohye" />

<meta property="og:title" content="김소혜 갤러리" />

<meta property="og:description" content=".." />

<meta property="og:type" content="website" />

<meta property="og:site_name" content="디시인사이드" />

<meta property="og:locale" content="ko_KR" />


// 이하 생략




:response_basic.html 를 텍스트 에디터로 확인했을 때 html 형식의 데이터들을 확인할 수가 있다.


이제 김소혜 갤러리(혹은 각자 취향, 취미의 관심사 정보가 있는 웹페이지)에서 

원하는 정보를 찾아 가공하여 쉽고 간편하게 활용해보도록 하자.


자, 그럼 여기서 생각해 볼 문제.

과연 나는 김소혜 갤러리에서 무엇을 얻고 싶은가?

왜 김소혜 갤러리를 긁는 봇(bot)을 만든 것인가?


1차적으로는 취미 프로젝트를 위한 프로젝트를 하고 있는 것이지만

그래도 만들기로한 이상 만든 프로그램이 목적성을 갖고 동작을 해야한다.


요청한 웹 페이지가 '김소혜 갤러리'인 만큼 이름에 걸맞게 다양한 짤방, 움짤이미지가 생산된다. 

그래서 말인데 게시판을 안본사이 새로운 짤방이 올라왔거나 과거에 게시되었던 짤방들을

사용자의 PC에 저장되도록 동작하게 만드는 것은 어떨까?


어떤 짤방들이 올라왔었는지 게시판을 뒤져가며 일일이 클릭할 필요없이 말이다.


목적이 정해졌으니 대략적인 기능 명세가 된다.

1) 기본적으로 우리가 만든 봇(bot)은 '김소혜 갤러리'에 올라온 게시물을 웹 서버에 요청할 수 있어야 한다.

2) 이미지가 포함된 게시물인지 텍스트로만 이루어진 게시물인지 확인할 수 있어야 한다.

3) 이미지가 포함된 게시물이라면 첨부되어 있는 이미지를 PC로 저장할 수 있어야 한다.


천천히 1)번 부터 진행해보자.

우선 다른 사용자가 올린 게시물을 웹 서버에 요청할 수 있어야 한다.

그래야 응답받은 결과를 갖고 파싱해서 짤방을 저장하던 말던 할것이 아닌가.


김소혜 갤러리(게시판) 웹 페이지 소스에서는 갤러리 게시물들의 URL이 모두 포함되어 있다.

그래야 웹 브라우저에서 사용자가 게시물을 클릭했을 때 

게시물의 URL을 갖고 웹 서버에 웹 페이지를 요청하고 응답받아 표시할테니까.

사용자가 클릭하는 행위는 사용자의 PC에서 일어나는 일이므로 웹 서버는 알 수가 없다.


김소혜 갤러리의 경우에는 30개의 게시물을 보여주고 있으니 

30개의 게시물에 해당하는 URL이 포함되어 있을 것이다.


결론적으로 봇(bot)이 새로이 올라오는 게시물이던 과거에 올라왔던 게시물이던

게시물을 응답받을 수 있는 URL을 알기 위해 

김소혜 갤러리(게시판)의 웹페이지에서 게시물 페이지를 요청할 수 있는 URL를 파싱하기만 하면

1)번은 끝!


다음에는 위의 계획을 실행하기 위해서 beautifulSoup라는 라이브러리를 사용할 것이다.

beautilfulSoup 사용법을.. 빠른 시일내에 올릴수 있으면 좋겠다...





반응형