본문 바로가기

just-coding-it

파이썬으로 네이버웹툰 순위를 크롤링하자

네이버 웹툰의 요일별 인기 순위를 가져와보자.

네이버 웹툰 페이지는 SSR(Server Side Rendering) 으로 동작한다. 따라서 HTML코드만 가져와도 데이터를 얻어내기 용이하기 때문에 난이도가 낮다고 할 수 있다.

 

인기순으로 정렬된 네이버 웹툰의 URL은 https://comic.naver.com/webtoon/weekday?order=User 이다.

여기서 쿼리 스트링 order값에 따라 정렬순서가 달라진다. (User - 인기순, Update - 업데이트순 등)

 

브라우저의 개발자도구로 쉽게 태그 위치를 알아낼 수 있다.

css선택자로 .list_area.daily_all 해당하는 위치에 웹툰 목록이 위치해있다.

개발자 도구에서 스크립트를 입력하여 객체를 확인하는 모습

그리고 그 아래에 각 요일별 웹툰이 .list_area.daily_all > .col 에 위치해 있는 것을 확인할 수 있다.

그리고 각 웹툰을 담고 있는 실질적인 콘테이너는 .list_area.daily_all > .col > .col_inner > ul 임을 확인할 수 있다.

개발자 도구에서 스크립트를 입력하여 객체를 확인하는 모습

그리고 각 웹툰의 제목은 .list_area.daily_all > .col > .col_inner > ul > li > a 의 텍스트임을 알 수 있다.

이제 실제로 구현할 일만 남았다.

위의 결과를 토대로 어떻게 작업할 것인지 계획해보자.

 

1. https://comic.naver.com/webtoon/weekday?order=User 에 GET요청을 보내서 HTML을 받는다.

2. HTML에서 .list_area.daily_all > .col > .col_inner > ul 에 해당하는 태그들을 모두 찾는다.

3. 각 ul마다 li > a 에 해당하는 태그들을 모두 찾는다.

4. a의 텍스트를 뽑아낸다.

5. ul 순서는 요일순서이고, a순서는 인기순이다.

 

먼저 venv로 파이썬 환경을 분리해주겟다.

python -m venv .venv

그리고 위 계획을 실행하기 위한 라이브러리를 설치하도록 하겠다. 

requests는 HTTP요청을 보내기 위한 라이브러리이고, beautifulsoup는 HTML을 분석하기 위한 라이브러리이다.

pip install requests 
pip install beautifulsoup4

아래와 같이 코드를 통해 콘솔창에 출력되는 것을 확인할 수 있다.

에러에 대한 처리가 없기 때문에 안정적인 코드도 아니며, 결과를 콘솔창을 통해 확인해야 하는 불편함도 있다.

이와 같은 문제는 차차 개선해나가면 된다. 우선 필요한 기능이 실행된다는 것을 확인했으니 이번 포스팅은 여기서 마친다.

import requests
from bs4 import BeautifulSoup as bs

url = 'https://comic.naver.com/webtoon/weekday?order=User'
response = requests.get(url)
html = response.text

soup = bs(html, 'html.parser')
all_container = soup.select('.list_area.daily_all > .col > .col_inner > ul')

weekdays = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
for weekday, daily_container in zip(weekdays, all_container):
    print(weekday)
    webtoons = daily_container.select('li > a')
    for i, webtoon in enumerate(webtoons, start=1):
        title = webtoon.text
        print(i, title)
    print('============================')