웹 크롤링 (무신사 브랜드 가격 비교)
간단한 프로젝트로 무신사의 브랜드 3개에대해서
웹크롤링으로 평균 가격 비교를 진행
먼저 베스트 랭킹 가격 비교
import requests
from bs4 import BeautifulSoup
# 웹사이트의 URL을 변수로 저장
url = 'https://www.musinsa.com/ranking/best'
# requests를 사용하여 웹 페이지의 내용
response = requests.get(url)
# response.content에서 BeautifulSoup 객체를 생성
soup = BeautifulSoup(response.content, 'html.parser')
# 클래스명 앞에 점을 붙여 올바른 선택자를 사용
products = soup.select('.list_info') # '.list_info' 클래스를 가진 태그
prices = soup.select('.price') # '.price' 클래스를 가진 태그
# 상품명, 가격 출력
for product, price in zip(products, prices):
product_name = product.text.strip()
product_price = price.text.strip()
print(f'상품명: {product_name}, 가격: {product_price}')
상품명: 3 / 20 배송 87-STAN009 [비건 스웨이드] 스탠다드 블루종 스웨이드 자켓 블랙, 가격: 133,000원 39,900원 상품명: 삼바 OG W - 화이트:실버 / IE0877, 가격: 139,000원 상품명: 2WAY 스웻 후드 집업 (MELANGE GREY), 가격: 45,000원 39,000원 상품명: Deep One Tuck Sweat Pants [Grey], 가격: 39,000원 35,100원 상품명: [무료반품]원턱 와이드 스웨트팬츠 그레이, 가격: 52,000원 33,800원 상품명: 세미 와이드 히든 밴딩 슬랙스 [블랙], 가격: 39,900원 31,890원 상품명: 레이어드 크루 넥 반팔 티셔츠_일반 기장 [화이트], 가격: 16,900원 상품명: 메달리스트 스니커즈 in leather white, 가격: 275,000원 206,200원 상품명: [무료반품]원턱 와이드 스웨트팬츠 블랙, 가격: 52,000원 33,800원 상품명: 이지 와이드 데님 팬츠 그레이, 가격: 49,800원 39,800원 상품명: [24년ver.] 2-WAY 테크 숏 자켓_블랙, 가격: 79,000원 44,240원 상품명: 3 / 29 배송 [남여공용]US - 1955 VTG 워크 자켓_Powder Pink, 가격: 124,000원 82,800원 상품명: 3 / 20 배송
상품명: ROYAL HUNTING JACKET 003 _ OLIVE, 가격: 168,000원 142,800원 상품명: [24년ver.] [SET] 2-WAY 테크 숏 자켓 셋업_블랙, 가격: 112,900원 79,900원
그 다음은 시각화
# 상품명, 가격을 저장할 리스트를 생성
product_names = []
product_prices = []
# 상품명, 가격을 추출하여 리스트에 저장
for product, price in zip(products, prices):
product_names.append(product.text.strip())
# 가격 데이터에서 쓸데없는 문자들을 제거
price_text = price.text.strip().replace(',', '').replace('원', '')
# 가격이 여러 개일 경우 첫 번째 가격만 사용
first_price = price_text.split()[0]
product_prices.append(int(first_price)) # 가격을 숫자로 변환하여 저장
# 가격을 시각화합니다.
plt.figure(figsize=(20, 10))
plt.bar(product_names, product_prices, color='skyblue')
plt.xlabel('상품명')
plt.ylabel('가격 (원)')
plt.title('무신사 베스트 상품 가격 시각화')
plt.xticks(rotation=90, fontsize=8)
plt.tight_layout() # 레이아웃 조정
plt.show()

그다음은 브랜드별 가격비교이다.
먼저 제로라는 브랜드
코드 순서는 1페이지 부터 마지막 페이지까지 상품명과 가격을 웹크롤링한 코드이다.
import requests
from bs4 import BeautifulSoup
# 웹사이트의 URL을 변수로 저장합니다.
url = 'https://www.musinsa.com/brands/xero?category3DepthCodes=&category2DepthCodes=&category1DepthCode=&colorCodes=&startPrice=&endPrice=&exclusiveYn=&includeSoldOut=&saleGoods=&timeSale=&includeKeywords=&sortCode=NEW&tags=&page=1&size=90&listViewType=small&campaignCode=&outletGoods=false&plusDelivery='
# requests를 사용하여 웹 페이지의 내용
response = requests.get(url)
# response.content에서 BeautifulSoup 객체를 생성
soup = BeautifulSoup(response.content, 'html.parser')
# 클래스명 앞에 점을 붙여 올바른 선택자를 사용합니다.
products = soup.select('.list_info') # '.list_info' 클래스를 가진 태그
prices = soup.select('.price') # '.price' 클래스를 가진 태그
# 상품명, 가격 출력
for product, price in zip(products, prices):
product_name = product.text.strip()
product_price = price.text.strip()
print(f'상품명: {product_name}, 가격: {product_price}')
# 상품명, 가격을 저장할 리스트를 생
product_names = []
product_prices = []
# 상품명, 가격을 추출하여 리스트에 저장
for product, price in zip(products, prices):
product_names.append(product.text.strip())
# 가격 데이터에서 쓸데없는 문자들을 제거
price_text = price.text.strip().replace(',', '').replace('원', '')
# 가격이 여러 개일 경우 첫 번째 가격만 사용
first_price = price_text.split()[0]
product_prices.append(int(first_price)) # 가격을 숫자로 변환하여 저장
# 평균 가격을 계산합니다.
average_price = sum(product_prices) / len(product_prices)
print(f'평균 가격: {average_price:.2f} 원')
상품명: Deep One Tuck Sweat Pants [Grey], 가격: 39,000원 35,100원 상품명: Deep One Tuck Sweat Pants [Black], 가격: 39,000원 35,100원 상품명: Deep One Tuck Sweat Shorts [Grey], 가격: 32,000원 상품명: Deep One Tuck Sweat Pants [White Grey], 가격: 39,000원 35,100원 상품명: Deep One Tuck Sweat Shorts [Black], 가격: 32,000원 상품명: Classic Sweat Pants [Black], 가격: 39,000원 상품명: Deep One Tuck Sweat Pants [Oatmeal], 가격: 39,000원 상품명: Deep One Tuck Sweat Pants [Navy], 가격: 39,000원 상품명: Deep One Tuck Sweat Pants [Khaki], 가격: 39,000원 상품명: Nylon Deep One Tuck String Pants [New 3 Colors], 가격: 43,000원 38,700원 상품명: Concise Round Neck Cardigan [Black], 가격: 65,000원 52,000원 상품명: Track Sweat Pants [2 Colors], 가격: 49,000원 상품명: Classic Sweat Pants [Grey], 가격: 39,000원 상품명: Classic String Sweat Pants [Grey], 가격: 39,000원 상품명: Deep One Tuck Sweat Pants [Light Khaki], 가격: 39,000원 상품명: Oversize Water Washed T-Shirts [Charcoal], 가격: 29,000원 상품명: Clean Denim Deep Two Tuck Vertical Pants [Indigo], 가격: 59,000원 상품명: Deep One Tuck Denim Pants [Mid Blue], 가격: 53,000원 상품명: Concise Round Neck Cardigan [Charcoal], 가격: 65,000원 52,000원
상품명: Nylon Cargo String Banding Pants [2 Colors], 가격: 49,000원 상품명: Deep One Tuck Slacks Banding Pants [2 Colors], 가격: 42,000원 상품명: Deep Two Tuck Denim Pants [3 Colors], 가격: 65,000원 평균 가격: 46088.71 원
import requests
from bs4 import BeautifulSoup
# 웹사이트의 URL을 변수로 저장.
url = 'https://www.musinsa.com/brands/xero?category3DepthCodes=&category2DepthCodes=&category1DepthCode=&colorCodes=&startPrice=&endPrice=&exclusiveYn=&includeSoldOut=&saleGoods=&timeSale=&includeKeywords=&sortCode=NEW&tags=&page=2&size=90&listViewType=small&campaignCode=&outletGoods=false&plusDelivery='
# requests를 사용하여 웹 페이지의 내용
response = requests.get(url)
# response.content에서 BeautifulSoup 객체를 생성
soup = BeautifulSoup(response.content, 'html.parser')
# 클래스명 앞에 점을 붙여 올바른 선택자를 사용.
products = soup.select('.list_info') # '.list_info' 클래스를 가진 태그
prices = soup.select('.price') # '.price' 클래스를 가진 태그
# 상품명, 가격 출력
for product, price in zip(products, prices):
product_name = product.text.strip()
product_price = price.text.strip()
print(f'상품명: {product_name}, 가격: {product_price}')
# 상품명, 가격을 저장할 리스트를 생성
product_names = []
product_prices = []
# 상품명, 가격을 추출하여 리스트에 저장
for product, price in zip(products, prices):
product_names.append(product.text.strip())
# 가격 데이터에서 쓸데없는 문자들을 제거
price_text = price.text.strip().replace(',', '').replace('원', '')
# 가격이 여러 개일 경우 첫 번째 가격만 사용
first_price = price_text.split()[0]
product_prices.append(int(first_price)) # 가격을 숫자로 변환하여 저장
# 평균 가격을 계산
average_price = sum(product_prices) / len(product_prices)
print(f'평균 가격: {average_price:.2f} 원')
상품명: Ribbed Patch Hood Zip Up [2 Colors], 가격: 59,000원 44,250원 상품명: Ribbed Patch Cargo Sweat Shorts [2 Colors], 가격: 43,000원 상품명: Middle Length Sweat Shirts [2 Colors], 가격: 39,000원 상품명: High Zip Hoody [2 Colors], 가격: 49,000원 상품명: String Hood Sweat Vest [2 Colors], 가격: 35,000원 상품명: Deep One Tuck Denim Sweat Pants [2 Colors], 가격: 55,000원 상품명: Carpenter Wide Sweat Pants [2 Colors], 가격: 55,000원 상품명: Deep One Tuck Parachute Pants [3 Colors], 가격: 55,000원 상품명: Deep Two Tuck String Sweat Pants [2 Colors], 가격: 49,000원 상품명: Check Deep One Tuck Banding Pants [2 Colors], 가격: 55,000원 상품명: Front Deep Two Tuck Sweat Pants [3 Colors], 가격: 45,000원 상품명: Nylon Deep One Tuck String Pants [3 Colors], 가격: 43,000원 38,700원 상품명: Oxford Wide Shirts [4 Colors], 가격: 42,000원 상품명: Deep One Tuck Pigment Washed Pants [3 Colors], 가격: 65,000원 상품명: Cross Tuck Vertical Banding Pants [3 Colors], 가격: 59,000원 상품명: Button Hood Zip Up [2 Colors], 가격: 55,000원 44,000원 상품명: Curved Sweat Pants [3 Colors], 가격: 45,000원 상품명: Deep One Tuck Hammer Denim Pants [3 Colors], 가격: 69,000원 상품명: Vertical Bermuda Banding Pants [3 Colors], 가격: 59,000원 상품명: Clean Denim Vertical Curved Pants [2 Colors], 가격: 62,000원 상품명: Concise Round Neck Cardigan [4 Colors], 가격: 65,000원 52,000원 상품명: Double Knee Vertical String Banding Pants [3 Colors], 가격: 59,000원 상품명: Layered Tuck Denim Half Jogger Pants [2 Colors], 가격: 45,000원 상품명: Parachute Sweat Pants [3 Colors], 가격: 49,000원 상품명: Vertical Clean Denim Trucker Jacket [Black], 가격: 89,000원 71,200원
상품명: Classic Raglan Hoodie Zip Up [Grey], 가격: 53,000원 42,400원 상품명: Classic Raglan Hoodie Zip Up [Black], 가격: 53,000원 42,400원 상품명: Classic String Sweat Pants [Navy], 가격: 39,000원 평균 가격: 48044.44 원
import requests
from bs4 import BeautifulSoup
# 웹사이트의 URL을 변수로 저장합니다.
url = 'https://www.musinsa.com/brands/xero?category3DepthCodes=&category2DepthCodes=&category1DepthCode=&colorCodes=&startPrice=&endPrice=&exclusiveYn=&includeSoldOut=&saleGoods=&timeSale=&includeKeywords=&sortCode=NEW&tags=&page=3&size=90&listViewType=small&campaignCode=&outletGoods=false&plusDelivery='
# requests를 사용하여 웹 페이지의 내용을 가져옵니다.
response = requests.get(url)
# response.content에서 BeautifulSoup 객체를 생성합니다.
soup = BeautifulSoup(response.content, 'html.parser')
# 클래스명 앞에 점을 붙여 올바른 선택자를 사용합니다.
products = soup.select('.list_info') # '.list_info' 클래스를 가진 태그를 찾습니다.
prices = soup.select('.price') # '.price' 클래스를 가진 태그를 찾습니다.
# 상품명, 가격 출력
for product, price in zip(products, prices):
product_name = product.text.strip()
product_price = price.text.strip()
print(f'상품명: {product_name}, 가격: {product_price}')
# 상품명, 가격을 저장할 리스트를 생성합니다.
product_names = []
product_prices = []
# 상품명, 가격을 추출하여 리스트에 저장합니다.
for product, price in zip(products, prices):
product_names.append(product.text.strip())
# 가격 데이터에서 쓸데없는 문자들을 제거합니다.
price_text = price.text.strip().replace(',', '').replace('원', '')
# 가격이 여러 개일 경우 첫 번째 가격만 사용합니다.
first_price = price_text.split()[0]
product_prices.append(int(first_price)) # 가격을 숫자로 변환하여 저장합니다.
# 평균 가격을 계산합니다.
average_price = sum(product_prices) / len(product_prices)
print(f'평균 가격: {average_price:.2f} 원')
상품명: Deep One Tuck Denim Pants [Mid Blue], 가격: 53,000원 상품명: Classic String Sweat Pants [Grey], 가격: 39,000원 상품명: Classic String Sweat Pants [Black], 가격: 39,000원 상품명: Concise Round Neck Cardigan [Egg White], 가격: 65,000원 52,000원 상품명: Concise Round Neck Cardigan [Black], 가격: 65,000원 52,000원 상품명: Luster Balloon Pants [Beige], 가격: 59,000원 49,000원 상품명: Classic Sweat Pants [Black], 가격: 39,000원 상품명: Classic Sweat Pants [Grey], 가격: 39,000원 상품명: Oversize Water Washed L/S T-Shirts [Charcoal], 가격: 32,000원 상품명: Oversize Water Washed L/S T-Shirts [Grey], 가격: 32,000원 상품명: Concise Round Neck Cardigan [Charcoal], 가격: 65,000원 52,000원 상품명: Concise Round Neck Cardigan [Brown], 가격: 65,000원 52,000원 상품명: Concise Round Neck Cardigan [Beige], 가격: 65,000원 52,000원 상품명: Deep One Tuck Pants [Egg White], 가격: 49,000원 상품명: Deep One Tuck Denim Pants [Black], 가격: 53,000원 상품명: Deep One Tuck Denim Pants [Light Blue], 가격: 53,000원 상품명: Luster Balloon Pants [Khaki], 가격: 59,000원 49,000원 상품명: Luster Balloon Pants [Black], 가격: 59,000원 49,000원 상품명: Oversize Water Washed T-Shirts [Charcoal], 가격: 29,000원 평균 가격: 50473.68 원
average_price = (50473.68 + 48044.44 + 46088.71) / 3
print('제로 상품 평균 가격: {:.2f} 원'.format(average_price))
제로 상품 평균 가격: 48202.28 원
나머지 브랜드들도 이런식으로 진행을 한다.
결과
제로 : 48202.28원
토피 : 61327.46원
디미트리블랙 : 67120.86 원
결과에 따르면
디미트리블랙>토피>제로
가격순으로 나타난다.
전체 코드는 밑에 링크에
wonderfulawsome/Web-Crawling (github.com)
GitHub - wonderfulawsome/Web-Crawling
Contribute to wonderfulawsome/Web-Crawling development by creating an account on GitHub.
github.com