크롤링

무신사 크롤링

taehyuck 2025. 3. 23. 15:07
728x90

일단 상품 상세페이지 하나의 데이터만 가져올게요

 

여기 판매자 정보에서 

브랜드, 연락처, 이메일, 영업소재지

이렇게 4개를 가져올거에요

결과적으로

 

신상탭에 있는 모든 브랜드의 정보를 가져올거에요

 

1단계 (한개의 브랜드의 브랜드, 연락처, 이메일, 영업소재지)

html코드에 원하는 데이터가 들어가 있어서

정규표현식을 이용해 원하는 딕셔너리 형태의 데이터만 추출합니다.

 

제이슨 형태로 바꿔주고요

 

원하던 정보는 다 가져왔어요

 

 

2단계 (각 브랜드별 첫번째 상품 코드 가져오기)

각 브랜드의 

브랜드, 연락처, 이메일, 영업소재지를 가져오기 위해서는

상품의 상세페이지에 들어가야해요

그래서 저희는 각 브랜드의 첫번째 상품의 상품코드들을 모아서

상세페이지로 들어가 데이터를 추출할거에요

 

 

데이터를 읽어줍니다.

 

차례차례 원하는 데이터가 있는 곳으로 도달해 봅시다

 

items안에 있는 id가 상품 코드인 거 같아요

 

한 페이지에 대한 브랜드별 첫번째 상품 코드를 가져왔어요

 

이제 이걸 상세페이지 url에 바꿔가면서 브랜드 정보를 추출하면 돼요

 

풀코드

res = requests.get('https://api.musinsa.com/api2/hm/v1/pans/release', params=params, cookies=cookies, headers=headers)

js_code = res.text
data = json.loads(js_code)

brand_set = set()

# 각 브랜드별 계산 (브랜드가 맞는지 확인)
for i in range(len(data['data']['modules'])) :
    pattern = r"^\d+$"
    id_value = data['data']['modules'][i]['id']
    
    #만약 브랜드가 맞다면 첫번째 상품의 상품코드를 가져옴
    if re.fullmatch(pattern, id_value):
        product_id = data['data']['modules'][i]['items'][0]['id']
        
        # 상품코드를 이용해 상세페이지로 이동
        url = 'https://www.musinsa.com/products/{}'.format(product_id)
        sub_res = requests.get(url, cookies=sub_cookies, headers=sub_headers)

        html = res.text
        soup = BeautifulSoup(html, 'html.parser')
        text = soup.select_one("category-data")
		
        # html코드에서 데이터 형태를 추출
        pattern = r'window.__MSS__.product.state\s\=\s(\{.*?\});'
        match = re.search(pattern, sub_res.text, re.DOTALL)
        json_text = match.group(1)

        sub_data = json.loads(json_text)

        brandname = sub_data['brandInfo']['brandName']
        phoneNumber = sub_data['company']['phoneNumber']
        email = sub_data['company']['email']
        address = sub_data['company']['address']
		
        # set을 이용해 중복되는 브랜드x
        brand_set.add((brandname,phoneNumber,email,address))
728x90