1. 크롤링

 

크롤링(crawling) : 웹 페이지를 그대로 가져와서 데이터를 추출해 내는 행위

개발자로서 데이터를 얻기 위해 일일이 사이트에서 검색해서 추출하는 것은 매우 번거롭다. 컴퓨터 프로그램을 이용한다면 필요한 자료만 찾아 종합하고, 획득한 내용을 활용해서 좋은 정보를 추출할 수 있다. 이러한 행위를 크롤링이라 한다.

Python을 통해 크롤링을 하기 위해서는 HTML과 HTTP가 무엇이고 어떤 방식으로 자료를 가져와야 할지 파악해야 한다.

 

2. HTML

 

HTML : 웹을 통해서 볼 수 있는 문서를 만들 때 사용하는 웹 언어의 한 종류이고, 대부분의 웹 페이지는 HTML로 작성되어 있다.

HTML는 일반적으로 다음과 같이 구성되어 있다.

 

 

사실 이렇게 봐서는 제대로 이해가 되지 않는다.

Wikipidea에서 파이썬을 검색한 내용을 바탕으로 자세히 확인해보자.

F12를 눌러 개발자 도구를 활성화하면 HTML의 구성을 확인할 수 있다.

파란색 부분으로 표시된 부분은 body 태그 안의 div 태그의 1번째에는 my-page-base라는 id 속성, noprint라는 class 속성이 담겨있다는 의미이다.

이 부분을 출력하기 위해서 Python 언어로 작성하면 다음과 같다. 

 

 

soup라는 변수에 URL을 넣어서 body 태그 내의 div 태그의 첫 번째 값을 출력하니 개발자 도구화면과 동일하게 출력됨을 확인할 수 있다.

이 태그의 의미는 div라는 tag와 class라는 속성1에 'noprint', id라는 속성2에 'mw-page-base'을 가진 채로 Value는 없이 구성되어 있다는 것이다.

작성된 코드에서 urllib는 URL을 열고 읽는 모듈을 모은 패키지이다.

 

3. BeautifulSoup

 

HTML, XML 문서 등 Parsing을 통해 분석에 용이한 Python 모듈이다.

위에서 soup.body.div를 출력해낸 것 처럼 beatutifulsoup 모듈을 사용하면 데이터 문자열을 Parising할 수 있다. 

 

 1) find 함수

 

조건을 만족하는 하나의 태그만 출력한다.

 

 

 2) find_all 함수

 

조건을 만족하는 모든 태그를 List 형태로 출력한다.

 

 

태그가 많아서 다 출력되지는 않았지만 맨 처음을 보면 List로 출력된다는 것은 확인할 수 있다.

 

 3) get_text 함수

 

태그 내의 Value를 추출하는 함수로, 부모 태그의 경우는 모든 자식의 태그 Value를 출력한다.

 

 

4. requests

 

requests를 사용하면 http의 request 요청과 response를 확인할 수 있다.

 

 

위에서처럼 Wikipedia의 '파이썬' 검색 결과를 url로 사용한다.

 

 

response 변수에는 url을 request 요청한 결과가 저장된다.

 

 

200이라고 출력이 된 것은 Wikipedia에서 '파이썬'이라고 검색해달라고 하는 요청이 성공했음을 의미한다.

 

response.text를 출력하면 HTML에 담긴 모든 정보가 한번에 출력되는 것을 확인할 수 있다.

모든 내용을 볼 수 있지만 가독성이 없다는 것이 단점이다.

 

1) HTTP Status Code

 

위에서 확인한 response의 요청값에 대해 자세히 알아보려 한다.

일상에서 URL에 접속할 때 자주 접하는 http status code가 있다. 


  1. 2xx (성공) : 요청한 동작을 수신하여 성공적으로 처리


- 200(성공)

가장 일반적으로 사용되는 요청에 대해서 성공을 알려주는 응답이다.

 

- 204(컨텐츠 없음)

요청에 대해서 성공했지만, 보내는 컨텐츠가 없다.

 

2. 4xx (요청 오류) : 클라이언트의 요청 오류


- 400 (잘못된 요청)

잘못된 요청에 대해 실패했다는 응답



- 403 (Forbidden)

요청에 대해서 거부한다는 응답 (ex : 사용자가 리소스에 대한 필요 권한이 없음)



- 404 (Not Fount)

요청에 대한 페이지를 찾을 수 없다는 응답

 

3. 5xx (서버 오류) : 서버가 요청을 수행하지 못함을 나타내는 경우


- 500 (내부 서버 오류)

서버 내에서 에러가 발생하여 요청을 수행할 수 없다는 응답



- 502 (Bad Gateway)

서버가 프록시 역할을 하고 있거나 서버에서 잘못된 응답을 받은 경우



- 503 (서비스를 사용할 수 없음)

일시적으로 서버가 터졌거나 유지보수 중에 나타나는 응답

 

이 외에도 다양한 Status Code가 있지만 이 정도만 알아둬도 유용할 때가 많다. 

 

2) GET vs POST


HTTP 요청에 필요한 HTTP 메소드는 GET과 POST로 나뉜다.

 

GET 방식 : 서버로부터 정보를 조회하기 위해 설계된 메소드

POST 방식 : 리소스를 생성이나 변경하기 위해 설계된 메소드

 

간단하게 두 방식의 차이를 설명하자면 다음과 같다.

GET은 서버에 동일한 요청을 여러 번 하더라도 동일한 응답이 돌아온다.

반면, POST는 동일한 요청을 여러 번 하더라도 매번 다른 응답이 돌아올 수 있다는 것이 큰 차이다.

이렇기 때문에 개발자는 용도에 맞는 방식을 사용해야 한다.

 

 

OPEN API를 크롤링하는 내용에 대해서는 크롤링(2)에서 설명하려 한다.

728x90
반응형

'데이터 사이언스 메뉴얼 > Crawling' 카테고리의 다른 글

융합연구 1 - 크롤링(2)  (0) 2020.04.13
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기