쿠팡 상품 크롤링
쿠팡에 검색어를 입력하고 쿠팡 랭킹순으로 상품을 엑셀에 저장해보자.
import requests
from bs4 import BeautifulSoup
import pyautogui
import openpyxl
keyword = pyautogui.prompt("검색어를 입력하세요.")
num = int(pyautogui.prompt("몇 페이지까지 가져올까요?"))
wb = openpyxl.Workbook('coupang/coupang.result.xlsx')
ws = wb.create_sheet(keyword)
ws.append(['순위', '브랜드명', '상품명', '가격', '상세페이지 링크'])
rank = 1
for page in range(1, num + 1):
# 검색어
print(page, "번째 페이지 입니다.")
main_url = f"https://www.coupang.com/np/search?&q={keyword}&page={page}"
# 헤더에 User-Agent, Accept-Language 추가해주기.
header = {
'Host': 'www.coupang.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3',
}
response = requests.get(main_url, headers=header)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = soup.select("a.search-product-link") # 여러개라서 리스트로 반환
for link in links:
# 광고 상품 제거
if len(link.select("span.ad-badge-text")) > 0:
print("광고 상품 입니다.")
else:
sub_url = "https://www.coupang.com/" + link.attrs['href'] # 형식 맞추기
response = requests.get(sub_url, headers=header)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
try:
brand_name = soup.select_one("a.prod-brand-name").text # 상품명은 없을 수도 있다.
except:
brand_name = ""
# 상품명
product_name = soup.select_one("h2.prod-buy-header__title").text
# 가격
product_price = soup.select_one("span.total-price > strong").text
print(rank, brand_name, product_name, product_price)
ws.append([rank, brand_name, product_name, product_price, sub_url])
rank += 1
wb.save('coupang_result.xlsx')
네이버 뉴스를 크롤링 할 때와 유사한 방법으로 해결할 수 있다.
헤더에 User-Agent와 Accept-Language를 추가해 크롤링이 멈추는 현상을 방지한다.
광고 상품은 따로 처리해줬고, 상세 정보 페이지에 요소가 없는 경우가 생길 수 있어 이 경우도 처리해줬다.
입력받은 검색어로 검색을 시도하는데, 이 때 URL은 필요한 쿼리만 작성해주면 된다.
나머지는 네이버 뉴스 크롤링과 똑같다.
기본적인 로직은 같으니, 웹 사이트의 구조만 제대로 파악하면 어려움 없이 진행할 수 있다.
반응형
'Web > Web Scraping' 카테고리의 다른 글
크롤링에서 POST 요청이 필요한 경우 (0) | 2022.09.24 |
---|---|
네이버 금융 크롤링 (1) | 2022.09.24 |
이미지 크롤링 (2) | 2022.09.21 |
네이버 뉴스 크롤링 (0) | 2022.09.18 |
HTTP 통신과 라이브러리 (0) | 2022.04.05 |
댓글
이 글 공유하기
다른 글
-
네이버 금융 크롤링
네이버 금융 크롤링
2022.09.24 -
이미지 크롤링
이미지 크롤링
2022.09.21 -
네이버 뉴스 크롤링
네이버 뉴스 크롤링
2022.09.18 -
HTTP 통신과 라이브러리
HTTP 통신과 라이브러리
2022.04.05