본문 바로가기

프로젝트 목록/ParseWEB

ParseWEB [1-5] 알라딘 베스트 셀러 파싱

오랜만에 돌아온 크롤링 및 파싱 강좌입니다. 이번 강좌에서는 알라딘에서 제공해주고 있는 종합 주간 베스트 셀러에 해당하는 데이터를 가져와 보려고 합니다.

사전 정보 수집

알라딘에서 제공하는 베스트 셀러의 경우에는 yes24와 다르게 xhr을 사용하지 않고 전체 페이지를 렌더링 하는 방식을 채택하고 있습니다.

따라서 첫 강좌였던 "네이버 실시간 검색어"와 비슷한 방식으로 진행하면 됩니다.


먼저 알라딘에서 제공하는 전체 베스트 셀러 홈페이지 주소는 아래와 같습니다.

베스트 셀러

해당 주소로 이동한 다음 개발자 도구를 이용해서 Element 검색을 진행하면 됩니다. 해당 페이지로 이동하면 전체 주간 베스트 셀러 1위부터 50위까지를 알 수 있습니다.


먼저 베스트 셀러 도서명에 대한 정보를 가져오도록 합니다.

현재 주간 베스트 셀러 1위가 내 어머니 이야기 1~4 세트 - 전4권이므로 해당 내용으로 검색하면 됩니다. 검색하면 아래 사진과 같이 해당 검색어에 표시가 된 것을 확인할 수 있습니다.


해당 요소의 경우 b 태그로 묶여있고 다른 속성은 없는 것을 알 수 있습니다. 그래서 상위 요소로 가서 확인하면 a 태그에서 class 속성으로 bo3를 가진다는 것을 알 수 있습니다.

그래서 a.bo3 b로 검색을 해보면 총 50개의 요소가 검색되는 것을 알 수 있습니다.


다음으로 베스트 셀러 도서의 판매 가격에 대한 정보를 가져오도록 합시다.

현재 주간 베스트 셀러 1위의 도서의 가격이 55,800이므로 해당 내용으로 검색하면 됩니다.


해당 요소는 span 태그로 묶여있고 다른 속성은 없는 것을 알 수 있습니다. 그래서 상위 요소로 가서 확인하면 span 태그에서 class 속성으로 ss_p2를 가진다는 것을 알 수 있습니다.

그래서 span.ss_p2 span으로 검색을 해보면 총 50개의 요소가 검색되는 것을 알 수 있습니다.


이 내용을 기반으로 해서 코드를 작성하면 됩니다.

구현하기

from bs4 import BeautifulSoup
import requests

def get_content():
	url = 'https://www.aladin.co.kr/shop/common/wbest.aspx?BestType=Bestseller&BranchType=1&CID=0'
	req = requests.get(url)
	content = req.content

	soup = BeautifulSoup(content, 'html.parser')
	book_name_elems = soup.select('a.bo3 b')
	book_price_elems = soup.select('span.ss_p2 span')

	book_names = map(lambda x: x.text, book_name_elems)
	book_prices = map(lambda x: x.text, book_price_elems)

	return list(zip(book_names, book_prices))

result = get_content()

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

시연 결과

아래 이미지와 같이 알라딘의 종합 주간 베스트 셀러를 잘 가지고 오는 것을 확인할 수 있습니다.


더 생각해보기

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


  1. 도서 제목과 판매가격 말고 다른 정보를 가지고 오려면 어떻게 해야 할지 생각해봅시다.
  2. 50위 이후의 베스트 셀러 정보를 가지고 오려면 코드를 어떻게 수정해야 할지 생각해봅시다.
  3. 종합 분야가 아닌 다른 분야에서의 베스트 셀러 정보를 가지고 오려면 코드를 어떻게 수정해야 할지 생각해봅시다.