이제 데이터 공부 안하는 블로그

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 22회차 미션 본문

파이썬

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 22회차 미션

공사노비 2020. 11. 23. 21:44

 


쿠팡 스크래핑을 계속 하겠습니다.

어제까지 제품명, 가격, 평점, 리뷰수까지 가져오는 코드를 작성해 보았습니다. 

오늘은 거기서 광고를 제외하고, 내가 원하는 평점이상의 제품들만 가져오는 코드를 완성해나가 보겠습니다. 

여기서 정규식이라는것도 나오는데 이부분은 강사님도 너무 다양하고 공부할게 많다고 설명했고 자세히 공부하지 못했습니다. 

오늘 사용하는 것만 간단히 설명해보면 일단 re 라이브러리를 불러옵니다 

 

import re 

를 맨 위에 추가 해 줍니다. 

 

그리고 변수를 추가해 줍니다. 

soup 변수 아래에

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

attrs에 re.compile 메소드를 추가하고, search-product앞에 ^ 을 붙이면 search-product로 시작하는 li태그를 가진 것들을 모두 불러올수 있습니다. 우리가 불러 오고 싶은 내용들이 search-product로 시작하지만 뒤에 있는 값은 다른 것들이 있기 때문입니다. 

 

그리고 광고상품 제외를 해보았습니다. 

for item in items:

ad_badge = item.find(“span”, attrs={“class”:"ad-badge-text"})

if ad_badge:

        print("\n광고 상품 제외합니다.")

        continue

이렇게 해주면 가져온 items변수에서 ad-badge값을 가진 정보들을 제외할수 있습니다. 

 

이번에는 리뷰가 200개 이상하고 평점이 4.5이상 되는것만 조회하도록 해보겠습니다.

어제 작성해준 rate변수 아래항에 if문을 계속 추가해줍니다. 

 if rate:

        rate = rate.get_text()

    else:

        rate = "평점 없음"

        print("\n평점 없는 상품 제외합니다.")

        continue

 

    rate_cnt = item.find("span", attrs={"class":"rating-total-count"}) # 리뷰수

    if rate_cnt:

        rate_cnt = rate_cnt.get_text() #예 : (26)

        rate_cnt = rate_cnt[1:-1] #이전에 배웠던 슬라이싱을 활용해 괄호를 지웁니다. 

    else:

        print("평점 없는 상품 제외합니다.")

        continue

 

이제 4.5이상, 200개 이상의 조건을 달아줍니다. 여기서 평점을 실수형, 리뷰수를 정수형이므로 type을 잘 지정해줍니다.        

    if float(rate) >= 4.5 and int(rate_cnt) >= 200:

        print(" \n제품명: {0} \n가격: {1}원 \n평점: {2} \n리뷰수: {3}".format(name, price, rate, rate_cnt))

 

여기까지 작성한후 코드를 실행하면 내가 원하는 조건들로만 정보를 가져와 보여줍니다.

 

 

 

강의소개 https://bit.ly/33a7nvc