Sparta Coding Club/Today I Learned [TIL]

[TIL] #DAY - 054 - (1) 무신사 크롤링? 스크랩핑!(실시간 랭킹)

양한마리 2022. 11. 22. 08:17
728x90



무신사 크롤링? 스크래핑!

BeautifulSoup 을 이용하여 무신사 랭킹을 출력해보자!

 




[문제 요약]

1. 무신사 실시간 랭킹을 1~90위까지 출력해보자

# 순위 : (1) ((2))
# 상품번호 : (3)
# 브랜드명 : (4)
# 상품명 : (5)
# 가격(%) : (6)원 ((7))
# 리뷰 : (8)개
 
(1)순위 (2)변동 순위 (3)상품번호 (4)브랜드명 (5)상품명 (6)판매가 (7)할인율 (8)리뷰갯수

[풀이 요약]

- HTML, requests, BeautifulSoup, User-Agentf 를 이용하여 웹사이트 내용 출력하기

[코드]

import requests
import math
from bs4 import BeautifulSoup

page = 1
best_ranking = f"https://www.musinsa.com/ranking/best?period=now&age=ALL&mainCategory=&subCategory=&leafCategory=&price=&golf=false&kids=false&newProduct=false&exclusive=false&discount=false&soldOut=false&page={page}&viewType=small&priceMin=&priceMax="


url = best_ranking
headers = # User Agent string 내용 확인하기
res = requests.get(url, headers)
res.raise_for_status()

soup = BeautifulSoup(res.text, 'lxml')
 
all_rankings = soup.find_all("li", attrs={"class":"li_box"})
for item in all_rankings:
    # 상품 번호
    product_number = item["data-goods-no"]
    # 랭킹 : 순위 (변동 순위)
    rank, variation_rank = item.find("p", attrs={"class":"n-label label-default txt_num_rank"}).get_text().split("위")
    rank = rank.replace(" ", "")
    rank = rank.replace("\n", "")
    variation_rank = variation_rank.replace(" ", "")
    variation_rank = variation_rank.replace("\n", "")
    # 브랜드명
    brand_name = item.find("p", attrs={"class":"item_title"}).a.get_text()
    # 상품명
    product_name = item.find("p", attrs={"class":"list_info"}).a.get_text()
    product_name = product_name.replace(" ", "")
    product_name = product_name.replace("\n", "")
    # 가격 (정상가/할인가)
    price = item.find("p", attrs={"class":"price"}).get_text()
    price = price.replace(",", "").replace("원", "").split()
    if len(price) == 2:
        original_price = price[0]
        discount_price = price[1]
    else:
        original_price = price[0]
        discount_price = price[0]
    # 할인율 구하기
    discount_rate = math.floor(round((1-int(discount_price)/int(original_price)) * 100, 0))  
    # 123456 -> 123,456 변경
    discount_price = format(int(discount_price), ",")
    # 리뷰 갯수
    review_count = item.find("span", attrs={"class":"count"})
    if review_count != None:
        review_count = int(review_count.get_text().replace(",", ""))
    else:
        review_count = 0
    review_count = format(review_count, ",")
    
    print(f"순위 : {rank} ({variation_rank})\n",
            f"상품번호 : {product_number}\n",
            f"브랜드명 : {brand_name}\n",
            f"상품명 : {product_name}\n",
            f"가격(%) : {discount_price}원 ({discount_rate}%)\n",
            f"리뷰 : {review_count}개\n")

 

[출력 내용]

순위 : 1 (-)
 상품번호 : 2100462
 브랜드명 : 무신사 스탠다드
 상품명 : 리버서블쉐르파플리스후디드재킷[아이보리/블랙]
 가격(%) : 37,690원 (55%)
 리뷰 : 306개

순위 : 2 (-)
 상품번호 : 2683886
 브랜드명 : 폴로 랄프 로렌
 상품명 : 폴로소프트플래드실크블렌드수트재킷-브라운
 가격(%) : 899,000원 (0%)
 리뷰 : 0개

순위 : 3 (▲10)
 상품번호 : 1575612
 브랜드명 : 쿠어
 상품명 : MTR발마칸코트(블랙)
 가격(%) : 296,100원 (10%)
 리뷰 : 3,204개


--- 중략 ---


순위 : 88 (▲999)
 상품번호 : 665782
 브랜드명 : 닥터마틴
 상품명 : 2976첼시부츠스무스블랙/11853001
 가격(%) : 216,000원 (10%)
 리뷰 : 2,946개

순위 : 89 (▲45)
 상품번호 : 2702397
 브랜드명 : 키뮤어
 상품명 : [오정규PICK](솔리드OR멀티트위드선택)_12컬러코튼워셔블하찌벌키크루넥니트
 가격(%) : 29,900원 (49%)
 리뷰 : 4,441개

순위 : 90 (▼64)
 상품번호 : 2827246
 브랜드명 : 스노우피크 어패럴
 상품명 : 캠픽후드다운자켓_BK
 가격(%) : 299,000원 (0%)
 리뷰 : 5개

 

 

 

728x90
반응형