Allen's 데이터 맛집

[쿠팡]노트북 데이터를 필터링하여 수집해보기 본문

Programming/Web Scraping

[쿠팡]노트북 데이터를 필터링하여 수집해보기

Allen93 2023. 8. 10. 22:00

이번 웹 크롤링은 쿠팡에서 분별력 있는 데이터를 필터링하여 수집해 보겠습니다

 

데이터는 임의로 '노트북'에 대해서 검색해 보겠습니다.

쿠팡에 들어가서 먼저 수많은 페이지가 있지만 그중에서 1~5페이지까지 노트북을 검색해 봅니다

그리고 평점이 좋은 노트북만 보고 싶어, 평점수가 100개 이상 그리고 평점이 4.5 이상인 것들을 추려봅니다.

애플 제품광고성으로 상단에 나오는 제품은 제외합니다

 

출력은 제품명, 가격, 평점, 바로가기 링크를 출력해 봅니다.

import requests
import re
from bs4 import BeautifulSoup

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}

for i in range(1,6):
    print('\n\n 페이지 : ',i)
    url = 'https://www.coupang.com/np/search?q=%EB%85%B8%ED%8A%B8%EB%B6%81&channel=user&component=&eventCategory=SRP&trcid=&traid=&sorter=scoreDesc&minPrice=&maxPrice=&priceRange=&filterType=&listSize=36&filter=&isPriceRange=false&brand=&offerCondition=&rating=0&page={}&rocketAll=false&searchIndexingToken=1=4&backgroundColor='.format(i)


    res = requests.get(url, headers = headers)
    res.raise_for_status()
    soup = BeautifulSoup(res.text,'lxml')

    items  = soup.find_all('li',attrs={'class':re.compile('^search-product')})

    for item in items:
        #광고 제품은 제외
        ad_badge = item.find('span',attrs={'class':'ad-badge-text'})
        if ad_badge :
            print(' <광고 상품은 제외합니다.>')
            continue

        name = item.find('div', attrs={'class':'name'}).get_text()

        # 애플 제품 제외
        if 'Apple' in name:
            print('<애플 상품 제외>')
            continue

        price = item.find('strong', attrs={'class':'price-value'}).get_text()    #가격

        # 리뷰 100개 이상, 평점 4.5 이상 되는 것만 조회
        rate = item.find('em', attrs={'class':'rating'})     #평점
        if rate:
            rate = rate.get_text()
        else:
            rate = '평점 없음'      
            print('<평점 없는 상품은 제외합니다>')     
            continue

        rate_number = item.find('span', attrs={'class':'rating-total-count'}) #평점 수
        if rate_number :
            rate_number = rate_number.get_text()[1:-1]
        
        
        else :
            
            print('<평점 수 없는 상품은 제외합니다>')  
            continue
        link = item.find('a', attrs={'class':'search-product-link'})['href']

        if float(rate) >= 4.5 and int(rate_number) >= 100:
            print(f'제품명 : {name}')
            print(f'가격 : {price}')
            print(f'평점 : {rate}점 ({rate_number}개)')
            print('바로가기 : {}'.format('https://www.coupang.com'+link))
            print('-'*100) # 줄긋기

 

 

728x90