본문 바로가기
AI/자연어처리

[생활속의 IT] 자연어 처리#2 - 크롤러 만들기

by 생활속의 IT램프 2020. 3. 23.

우리의 목표는 호갱노노와 직방에 있는 부동산 평가 글들을 수집하여

감성분석 하고자 하는 것입니다.

 

이를 위해 우선 웹 크롤러 제작을 해보려 합니다.

먼저 크롤러라는 것에 대해 대략 개념을 짚고 넘어가겠습니다.

 

웹 크롤러란

 

웹 크롤러란 웹 페이지들을 다운로드 받는 소프트웨어를 의미합니다.

구글이나 네이버같은 사이트는 크롤러를 이용하여 전 세계에 존재하는 웹 사이트를 다운로드한 후 

알고리즘에 의해 웹 페이지를 분석하고 검색 순위를 결정하는데 사용되고 있습니다.

 

검색 뿐만 아니라 모아놓은 웹 페이지를 이용하여 자신이 원하는 모든 것을 할 수 있습니다.

가령 새로운 정보가 뜨면 알람을 받도록 하거나

지금 하려는 것처럼 감성 분석을 위해 웹 페이지를 다운 받는 것이죠.

 

그런데 파이썬을 이용한 웹 크롤러는 크게 2가지 유형이 있습니다. 

 

Requests 크롤링

첫 번째로 Requests 패키지를 이용한 크롤링입니다.

Requests 패키지는 HTTP 요청을 던져 오는 응답을 가져오는 방식입니다.

그런데 HTML 위주의 정적인 페이지만을 가져올 수 있어서 자바스크립트, DOM 정보등 동적 정보는 가져오지 못하는 단점이 있습니다.

 

이게 무슨 말인지 잠시 부연설명을 하자면

우리가 웹 서핑을 할 때 메뉴를 보고 클릭 -> 뜨는 메뉴를 보고 또 클릭 하는 식으로 진행을 많이 합니다.

원래 웹서버는 클릭할 때마다 전체 웹페이지를 전부 보내줘야 하는데 이게 부담이 상당히 큽니다.

 

그래서 자바스크립트는 변경되는 데이터만 XML에 담아 전송해주는 방식을 택합니다.

전체 웹페이지만 보내주는게 아니라 사용자 요청에 맞게 데이터만 다시 보내주는 식이죠.

 

그런데 Requests 패키지 방식의 크롤링은 이 동적 정보를 가져오지 못한다는 것이죠.

그래서 이럴 때는 Selenium 패키지를 사용합니다.

 

 

Selenium 패키지

Selenium 패키지는 원래 브라우저에서 웹 어플리케이션을 테스트하기 등장했습니다.

우리가 웹브라우저에서 메뉴를 보고 클릭 -> 또 클릭 -> 또 클릭 

하는 행위를 파이썬 코드로 재현하여 테스트하기 위해 만든 것입니다.

다만 Selenium은 실제 브라우저를 띄어 실제와 같이 동작합니다. 

 

그런데 이게 웹 크롤링에 이용되기 시작했습니다.

장점으로는 당연히 위에 언급하였던 Requests 패키지 방식의 단점을 극복하는 것입니다.

즉 동적 페이지 정보를 가져올 수 있는 것이죠.

그래서 웹 크롤링할 때 Selenium 방식도 많이 이용하고 있습니다.

 

그런데 언제 Requests를 쓰고 언제 Selenium을 써야 할까요?

일단 둘의 장단점을 비교해봐야 합니다.

 

  Requests 패키지 Selenium 패키지
수집 대상 - HTML 위주 정적페이지 - 정적 페이지+ 자바스크립트의 동적페이지 포함
로그인 - Login.do 같은 로그인 페이지가 존재해야 가능 - 별도 로그인 페이지 없어도 가능
장점 - 속도가 빠름 (가장 큰 장점임)

- 실제 브라우저를 띄어 이용하는 것과 같음.

- 동적 페이지를 가져올 수 있음.

단점

- 특정 사이트에서 막는 경우가 있음

- 동적 페이지는 가져오지 못함

- 속도가 매우 느림 (가장 큰 단점임)

 

한마디로 Requests는 닭 잡는 칼이고 Selenium은 소 잡는 칼입니다.

잡으려는게 닭인지, 소인지를 확인하여 적당한 칼을 쓰는게 맞습니다.

 

수집해야 할 사이트가 HTML 페이지만으로 수집 가능하고 대량 수집해야 한다면 Requests 방식을,

동적 페이지로 구성되어 있으면 Selenium을 써야겠습니다.

 

 

그럼 우선 Requests를 이용한 크롤러를 위한 파이썬 패키지를 설치해보겠습니다.

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

1. 필요한 패키지 설치하기

Requests 기반의 파이썬 크롤러를 만들기 위해 필요한 패키지는 2개입니다.

 

(1) requests: 파이썬에서 http를 사용할 수 있도록 해주는 패키지

(2) beautifulsoup4: 불러온 html 페이지를 가독성 좋게 바꿔주는 패키지

 

이제 패키지를 설치해보도록 하겠습니다.

먼저 requests를 설치해보죠.

 

파이참에서 File --> Settings를 선택합니다. 

아래와 같이 realState라는 가상환경을 사용하고 있고 현재 설치되어 있는 패키지 목록들이 나옵니다.

현재 requests나 beautiful4 같은 패키지는 설치가 안되어 있으므로 오른쪽 + 버튼을 눌러 추가 설치합니다.

 

검색 창에 requests를 치면 오른쪽에는 설명이 뜹니다.

이제 왼쪽 아래의 Install Package를 눌러 설치를 진행합니다.

 

그리고 이어서 beautifulsoup4 패키지를 설치합니다.

 

이제 필요한 패키지는 모두 설치되었습니다.

이제 웹 페이지를 긁어오겠습니다.

 

 

2. 직방 리뷰 페이지 가져오기

 

감성 분석을 위해선 리뷰 글을 가져와 학습시켜야 하므로 먼저 직방의 구조를 보겠습니다.

먼저 크롬에서 개발자 모드를 키기 위해 F12를 누른 후 우장산 롯데캐슬이란 아파트를 찍어서 리뷰를 보았습니다.

General을 보면 Request URL로 https://apis.zigbang.com/property/apartments/6077/reviews/v1

가 나오는 것을 볼 수 있습니다. 

아마 이 아파트의 ID 값이 6077인 듯 합니다.

 

그럼 이 아파트의 리뷰글을 Requests 패키지로 가져와 보도록 하겠습니다.

파이썬 코드는 주피터에다가 아래와 같이 작성하여 돌려보겠습니다.

 

※ 주피터에 대한 개념과 설치 보기

2020/03/22 - [AI/자연어처리] - [생활속의 IT] 자연어 처리 - 참고) Jupyter의 개념

 

 

결과를 보니 키 값은 summary와 data가 있다고 합니다.

data 키에 대한 values를 보겠습니다.

 

> print(data["data"])

 

 

data 키에 대한 value들도 id, age, sex, married 등의 키 값에 대한 value로 구성되어 있네요.

score key가 있고 평가는 desc라는 키 값에 담겨있습니다.

그런데 감성분석을 위해서는 일단 모든 값을 저장하는게 좋겠습니다.

 

여기까지 일단 아파트 1개에 대한 리뷰 글을 가져오는 것은 진행했습니다.

그런데 감성분석을 위해 데이터 학습을 시켜려면 아파트 1개로는 턱도 없이 부족합니다.

그래서 전국권의 모든 아파트의 리뷰글을 가져와 score를 라벨링하여 학습시켜 보는게 좋을 듯 합니다.

 

그러면 전국권의 모든 아파트는 어떻게 찾을까요?

아까의 우장산 롯데캐슬은 6077이란 ID를 쓰는 것을 확인했는데 일일이 ID값을 쳐서 크롤러이 하는건 아닌듯 하여

결국 전국 아파트의 ID 값을 자동으로 찾아내고 이를 이용하여 크롤링하는 것이 관건입니다.

 

해당 내용은 다음 포스트에서 보도록 하겠습니다.

 

 

댓글