naver_webtoon_analyze

python을 사용한 웹 크롤링 및 데이터 분석

주제 선정

파이썬을 처음 배웠을 때(2019년!) 유튜브 댓글을 크롤링해서 워드클라우드로 나타내보았었다. 그 때는 '정보구조'라는 과목의 과제로 데이터 수집을 해보았던 것인데, 이번에는 내가 좋아하는 주제의 자료를 모아서 가공을 해보고 싶어서 네이버 웹툰 페이지를 크롤링하기로 결정했다.

사용 라이브러리

  • beautifulSoup
  • selenium
  • time
  • matplotlib
  • pandas

코드 순서

1) BeautifulSoup 라이브러리로 기본적인 Parsing 시작. 모든 웹툰의 제목을 요일별로 저장했다.

결과는 다음과 같다. 매 요일마다 연재하는 작품을 저장한 것이기 때문에 여러번 연재하는 작품은 여러번 저장되어 있다.

스크린샷 2021-03-22 오후 11 35 01

2) Selenium 라이브러리로 필요한 웹 페이지로 넘어가 정보를 다시 수집했다.

작품명, 작가님 닉네임, 장르, 최신 10화의 평균평점, 그리고 가장 최근 화의 베스트 댓글 다섯개를 수집하였다.

3) matplotlib 라이브러리로 장르별 비율을 원 그래프로 나타내보았다.

'2)' 단계에서 장르별 웹툰 개수를 딕셔너리 형태로 저장했었다.

webtoon_genre = {' 액션': 38, ' 드라마': 86, ' 스포츠': 9, ' 시대극': 5, ' 스릴러': 41, ' 판타지': 85, ' 로맨스': 88, ' 개그': 15, ' 일상': 12, ' 감성': 3}
my_webtoon_genre = {' 드라마': 9, ' 로맨스': 9, ' 판타지': 2, ' 일상': 6, ' 스릴러': 1}

스크린샷 2021-03-22 오전 12 25 16

<전체 웹툰의 장르별 비중을 나타낸 원 그래프>

스크린샷 2021-03-22 오전 12 25 31

<내가 보는 웹툰의 장르별 비중을 나타낸 원 그래프. 난 로맨스코메디가 좋아!>

4) Pandas로 저장된 데이터들을 csv파일로 추출했다.

데이터를 pandas의 display 함수로 바로 출력하면 이렇게 나온다.

스크린샷 2021-03-22 오후 10 18 01

이걸 CSV파일로 출력하면 이렇게 엑셀에서 열어볼 수 있다.

스크린샷 2021-03-22 오후 11 09 10

새로 배운 것 & 헤맸던 부분 & 놓친 점

  • try and except 를 적절하게 사용해서 중간에 에러가 나도 데이터 수집이 멈추지 않도록 잘 처리해주어야 한다.
  • 베스트 댓글은 html 파일에 없고 따로 서버에서 데이터를 불러온다. 베스트 댓글을 수집을 할 때 크롬 창도 새로 켜고, 클린봇 해제를 해줘야 하고, 데이터도 서버에서 불러오느라 시간이 생각보다 오래 걸린다. 그래서 처음에는 driver.implicitly_wait(time_to_wait=5) 함수를 이용했었다. 분명히 컨텐츠를 다 찾을 때까지 기다리게 하는 메소드라고 구글링 했을 때 나왔는데 계속 에러가 났다. 댓글 데이터 수집이 안정적이지 않고 에러가 났다 안났다 하는 식이었다. 그래서 time.sleep(0.5) 이런식으로 강제적으로 기다리게 해주었더니 해결할 수 있었다.
  • 19금 웹툰은 베스트 댓글 데이터가 빠져있다. ( 셀에 모두 empty 라고 저장되어 있다. ) 19금 웹툰을 볼 때는 로그인 과정이 필요한데 이 부분을 생각하지 못했다.