본문 바로가기

프로젝트 목록/ParseWEB

ParseWEB [1-4] yes24 베스트 셀러 파싱

4번째로 하는 크롤링 및 파싱 강좌입니다. 이번 강좌에서는 yes24에서 제공해주고 있는 베스트 셀러에 해당하는 데이터를 가져와 보려고 합니다.

사전 정보 수집

yes24에서 제공하는 베스트 셀러의 경우 이전 강좌였던 네이버 및 다음 실시간 검색어 파싱과 동일하게 메인 홈페이지 소스에서 검색을 하고 해당하는 부분을 가지고 오는 방식으로도 할 수 있다.

하지만 이번 강좌에서는 바로 전 강좌인 네이트 실시간 검색어 파싱과 동일하게 xhr 요청을 캡처해서 진행해보도록 하겠다.


먼저 크롬을 통해 yes24 메인 홈페이지로 이동한 다음 F12를 이용해서 개발자 도구를 켜고 Network 탭으로 이동한 다음 xhr로 필터링을 시작한다.

그리고 아래 사진처럼 베스트 셀러 부분에서 '국내도서'를 다시 직접 선택해서 서버로 요청을 보낸다.


그러면 아래와 같이 2개의 요청이 간 것을 볼 수 있다.


의심스러운 1번째 요청을 선택해서 응답을 보게 되면 우리가 원하는 베스트 셀러에 대한 정보를 보내주는 것을 확인할 수 있으며 span 태그에서 class 속성으로 rnk_info을 가지는 원소를 가지고 오면 된다는 것을 알 수 있다.

그리고 해당 원소에서 strong 태그는 책 제목이고, em 태그는 책 저자에 대한 정보라는 것도 알 수 있다.


구현하기

from bs4 import BeautifulSoup
import requests

def get_content():
    url = 'http://www.yes24.com/_par_/welcome/TodayBook/BestSeller/W_R6_TodayBook_BestSeller_DomesticBook.htm'
    req = requests.get(url)
    content = req.content

    soup = BeautifulSoup(content, 'html.parser')
    elements = soup.find_all('span', class_='rnk_info')

    return list(map(lambda x: (x.strong.text, x.em.text), elements))

result = get_content()

for index, item in enumerate(result):
    print('[{:2}위] {} / {}'.format(index + 1, item[0], item[1]))

시연 결과

아래 이미지와 같이 yes24의 국내 베스트 셀러를 잘 가지고 오는 것을 확인할 수 있다.


더 생각해보기

아래 내용은 직접 생각해서 구현을 해보시기 바라며 해당 내용에 대한 답안은 따로 제공하지 않습니다.


  1. xhr 방식을 사용하지 않고 메인 페이지에서 파싱을 해오려면 코드를 어떻게 수정해야 할지 생각해봅시다.
  2. 국내 도서가 아닌 다른 분야에서의 베스트 셀러 정보를 가지고 오려면 코드를 어떻게 수정해야 할지 생각해봅시다.