이번엔 카카오웹툰의 순위를 크롤링하는 기능을 구현해 볼 생각이다.
카카오웹툰의 순위를 볼 수 있는 URL은 https://webtoon.kakao.com/ranking 이다.
역시나 개발자 도구를 통해서 태그의 위치를 알아보자.
1위 웹툰만 먼저 가져와보자. 개발자도구에서 CSS선택자 .mb-2.bg-grey-01.bg-cover.bg-no-repeat > .relative.w-full.bg-transparent 에 해당하는 태그를 가져와보면 잘 가져오는 것을 확인할 수 있다.
그런데 파이썬코드로 수행해봐도 똑같이 가져올 수 있을까? 결과부터 말하자면 "아니다"
왜냐하면 카카오웹툰은 CSR(Client Side Rendering)을 수행하기 때문이다. 따라서 서버에서 보내주는 HTML을 그대로 가져다 분석해도 우리가 보고 있는 화면은 나오지 않는다.
그렇다면 다른곳으로 눈을 돌려보자. 서버에서 HTML을 만들지 않는대신 서버에서 데이터만 받아와서 클라이언트에서 렌더링 할 것이기 때문에 그 데이터를 받아오는 것을 확인해보자.
개발자도구의 네트워크 탭에서 /section/v2/pages/rank 라는 엔드포인트로 GET요청하는 것을 확인할 수 있다.
preview를 통해 받아오는 데이터를 확인해보니 우리가 원하는 데이터가 맞는 것 같다.
data.sections[0].cardGroups[0].cards를 확인해보라. 전체 웹툰의 순위가 들어있다.
따라서 해당 엔드포인트에 요청만 보내면, 순위가 담겨있는 데이터를 JSON형태로 받을 수 있다는 뜻이다.
import requests
url = 'https://gateway-kw.kakao.com/section/v2/pages/rank'
response = requests.get(url)
res_json = response.json()
data = res_json['data']
sections = data['sections']
total_rank = sections[0]
card_group = total_rank['cardGroups'][0]
cards = card_group['cards']
for i, card in enumerate(cards, start=1):
content = card['content']
title = content['title']
print(i, title)
SSR 페이지 크롤링보다 더 간단한 코드로 해결이 가능한 것 같다. 하지만 경우에 따라서는 어떤 엔드포인트에 요청을 보내야 하는지, 그리고 요청을 보내기 위해서 필요한 값(header, body 등)을 분석하는데 시간이 오래걸릴 수도 있다. 아무튼 다음에 더 복잡한 케이스는 그 때 해결하기로 하자. 오늘은 여기서 끝.
'just-coding-it' 카테고리의 다른 글
카카오 로그인을 구현해보자 (0) | 2024.11.19 |
---|---|
파이썬으로 네이버 웹툰을 압축해보자 (0) | 2022.11.22 |
파이썬으로 네이버 웹툰을 다운로드 받아보자 (0) | 2022.11.12 |
파이썬으로 네이버 쇼핑 리스트를 크롤링하자 (0) | 2022.11.07 |
파이썬으로 네이버웹툰 순위를 크롤링하자 (0) | 2022.11.06 |