본문 바로가기
컴퓨터

네이버 웹툰 베스트 댓글 크롤링-2

by skyjwoo 2020. 3. 1.
728x90
반응형

2편에서는 크롤링 코드 작성 이전 준비 단계이다. 필요한 준비물들을 챙기고 사전 조사 해야 할 것에 대해 살펴볼 것이다

 

언어는 파이썬, 환경은 주피터 노트북을 이용했다. selenium, BeautifulSoup 모듈이 사용되기에 설치돼 있어야 한다. 또한 chrome driver 역시 필요하다.

 

chrome driver는 여기서 다운 받으면 된다.

 

크롬 드라이버 설치

 

클릭 후 나오는 창에서 자신의 OS에 맞는 드라이버를 다운 받아 압축을 풀어준다. 

 

selenium, BeautifulSoup 패키지 설치

주피터 노트북(Jupyter Notebook)을 사용하는 경우 다음과 같은 커맨드를 입력해 준다.

!pip install selenium # selenium package 설치
pip install bs4 # BeautifulSoup 패키지 설치

실행 환경이 주피터 노트북이 아닌 경우, cmd 창을 열어 python -m pip install selenium 을 입력해 주면 된다. 

 

코드를 본격적으로 실행하기에 앞서 selenium, bs4(BeautifulSoup) 패키지와 chrome driver에 대해 간략히 소개하자면,  우선 selenium은 chrome driver와 같은 web driver를 다루기 위한 패키지이다. selenium 내부의 webdriver 모듈을 이용해 chrome driver를 컨트롤 할 수 있다. 그럼 chrome driver는 왜 사용 하느냐 하면, 사실 파이썬 내장 request모듈과 bs4만으로도 crawling을 할 수 있으나, web driver를 사용하면 좀 더 많은 일을 할 수 있다. 예를 들어 이 프로젝트에선 사용되지 않지만, 페이지의 스크롤을 내려서 숨겨졌던 페이지의 소스를 가져오던가 하는 좀더 고급진 일들을 할 수 있다. 

bs4 패키지의 BeautifulSoup 모듈은 가져온 페이지 소스 즉, html 파일을 분석하는 데 도움을 준다. html은 태그가 해당 페이지의 내용물을 감싸는 구조로 되어있는데, 이 태그들을 추적해 내용물만 꺼내오는 작업을 용이하게 해 준다.

 

예를 들어, <div>내용물 입니다.</div>에서 soup.select('div')를 이용해 '내용물 입니다'라는 텍스트를 가져오는 것을 가능하게 해 준다. 

 

크롤링에 앞서 우리가 항상 해야 할 일이 있는데, 바로 크롤링할 대상을 미리 둘러보는 작업이다. 크롤링은 보통 수작업으로 오래 걸리는 일을 자동화 시켜준 다는 데 의의를 갖는다. 이를 위해서 우리가 크롤링 하고자 하는 페이지 내의 원하는 데이터가 들어있는 html, url 구조의 일정한 패턴을 찾아 내는 작업이 중요하다. 그리고 이 패턴을 프로그래밍으로 자동적으로 찾아 낼 수 있도록 하여 자동화가 가능하게 되는 것이다. 

 

우리가 크롤링할 페이지를 미리 살펴보며 사전 준비를 해 보자. 

가장 먼저 필요한 것이 우리가 원하는 데이터가 있는 페이지에서 어떤 태그를 가져와야 하느냐 이다.

 

이 프로젝트에서 크롤링할 부분은 베스트 댓글이기에 베스트 댓글만 볼 수 있는 창을 한 번 찾아 보았다. 

 네이버 웹툰 댓글 창에 BEST 댓글에 우클릭 후 새 탭에서 링크 열기 를 통해 베스트 댓글만 볼 수 있다. 

베스트 댓글만 있는 페이지

URL을 기억해 두자.

 

여기서 F12 키를 누르면 이 페이지의 소스를 볼 수 있다. 이 페이지 소스에서 다음과 같은 아이콘을 클릭한 후

 

왼편에 있는 우리가 원하는 댓글을 클릭하면, 오른쪽 소스에서 해당 댓글이 소스의 어느 부분에 위치하는 지 찾아볼 수 있다.

 

<span class = "u_cbox_contents"> </span>에 둘러싸여 있는 걸 알 수 있다, 태그도 기억해두자. 여기서 태그의 class표시를 통해 각 베스트 댓글에 접근할 수 있다. 

 

그럼 우리가 여기까지 알아낸 것은 베스트 댓글이 있는 페이지의 url과 그 페이지 내에서 댓글만을 뽑아내기 위한 태그이다. 그런데 우리는 특정 웹툰의 특정 회차 웹툰에 접근하고 싶다. 이는 url에 잘 나와있다. 

 

https://comic.naver.com/comment/comment.nhn?titleId=641253&no=276#  

 

url을 살펴보면, titleIdno 가 있는 걸 볼 수 있는데 이게 각각 웹툰의 Id 번호와 회차 번호이다. 즉, 외모지상주의는 641253의 Id를 갖고 있고 현재 보고 있는 댓글 창은 276화의 댓글 창이다.

 

이렇게 직접적으로 웹툰을 클릭해서 알아보는 방법도 있지만, 다른 웹툰의 Id, 그리고 현재 총 몇 화까지 있는 지 알고 싶다! 

 

이 역시도 위와 같은 방법으로 접근할 수 있다. 

웹툰 홈페이지에서 class="title" 을 갖는 a 태그들을 살펴보면, 주소가 링크되어 있는데 이 주소를 slicing해서 titleId를 얻어낼 수 있다. 총 회차 수는 이 링크를 타고 웹툰에 들어가 가장 최근 회차의 링크를 분석해 알아 낼 수 있다. 이 이상의 설명은 글의 길이상 생략하고, 개인의 과제로 남겨두도록 하겠다. 

*물론 총 회차 수를 찾지 않고 try-except 문으로 error가 발생할 때까지 크롤링 하는 방법도 있다. 

 

이제 우리는 각 웹툰의 Id 번호와 회차 수, 그리고 댓글 url을 통해 특정 웹툰의 댓글 페이지로 이동할 수 있는 방법을 알 게 되었다. 그리고 거기서 댓글이 들어있는 태그도 알게 되었다.

 

이를 통해 해야 할 일을 정리해 보면, 

 

1. 각 웹툰의 Id 번호 크롤링

2. 각 웹툰 Id 번호를 이용해 현재까지 총 회차 수 크롤링

3. 우리가 알아낸 Id와 총 회차 수, 댓글 url, 댓글이 들어있는 태그를 이용해 전체 회차에 대한 해당 페이지의 댓글 추출 진행

 

이렇게 3가지로 요약해 볼 수 있다. 

실제 코드에 대해선 3편에서 알아볼 것이다. 

 

728x90
반응형

댓글