쿠팡(Coupang)검색결과 크롤링
이번 포스팅에서는 쿠팡검색결과를 크롤링 하는 방법을 알아봅니다.
크롤링을 위한 사전 세팅
검색키워드 입력을 받는 keyword 설정
keyword = input('검색키워드: ')
params 및 header 설정
- params와 headers는 딕셔너리 구조로 설정한다. params에는 받아올 값을 입력하고 headers에는 user-agent나 cookie같은 것을 입력한다.
- user-agent는 F12(검사)에서 Network탭을 누른다음 Doc탭을 눌러서 볼 수 있다.
- user-agent가 없으면 크롤링이 안될 수도 있으니 가급적 설정하도록 하자.
params = {
'q' : keyword,
}
#User-Agent header설정
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
페이지 소스 살펴보기
크롤링할 대상은 제품명, 제품페이지로 가는 link url, 가격이다.(가격은 할인이 적용된 것을 크롤링한다.)
먼저 페이지소스를 살펴본다.
- 제품명과 제품url, 가격은 모두 <ul#produckList>(첫번째 직사각형) 밑에 있으며 제품하나하나 각각
- 로 감싸져있다
- 제품url은 태그 에 있으며(두번째 직사각형) base_url과 합쳐야만 제대로된 링크가 완성된다.
- 제품명은 <div.name>에 있으며(세번째 직사각형) text.strip()로 텍스트로 가지고 온다.
- 가격(할인적용)은 <strong.price-value>에 있으며(네번째 직사각형) text.strip()으로 텍스트로 가지고 온다.
- 가격은 ','가 빠진채로 가지고 와야하는데, 그이유는 크롤링한 파일을 csv로 저장할 때 ','로 구분해서 저장하기 때문에 가격이 둘로 나뉠 수 있기 때문이다.(join을 사용한다.)
검색 목록 크롤링
import requests
import pandas as pd
from bs4 import BeautifulSoup
from urllib import parse
from datetime import datetime
result_list = []
res = requests.get(url, params=params, headers=headers)
if res.status_code == 200:
soup = BeautifulSoup(res.text)
item_list = soup.select('ul#productList li')
base_url = 'https://www.coupang.com/'
error_cnt = 0
for item in item_list:
try:
item_name = item.select_one('div.name').text.strip()
link = item.select_one('a').get('href')
link = parse.urljoin(base_url, link)
price = item.select_one('strong.price-value').text.strip()
price = ''.join(price.split(','))
result_list.append([item_name, link, price])
except Exception as e:
print(e)
error_cnt += 1
크롤링 내역 저장
위에서 크롤링한 내역을 csv나 excel로 저장한다.
date=datetime.now().strftime('%Y-%m-%d')
filename = f'쿠팡_{keyword}_조회결과_{date}'
df = pd.DataFrame(result_list, columns = ['title','link','price'])
df.to_csv(filename+".csv", index=False, encoding='UTF-8')
df.to_excel(filename+".xls", index=False)
검색페이징
- 마지막 페이지 번호 조회
- 1~ 마지막페이지까지 요청하면서 상품크롤링
- 크롤링한 내용을 파일로 저장
크롤링할 대상 selector
- 마지막 페이지 번호 :a.btn-last : text
- 상품정보
- base : ul#productList li
- title : div.name : text
- link : a href
- price : strong.price-value : text
크롤링을 위한 기본 설정 및 마지막 페이지 가지고오기
import requests
import pandas as pd
from bs4 import BeautifulSoup
from urllib import parse
from datetime import datetime
import time
base_url = 'https://www.coupang.com/np/search?q={}&page={}'
keyword = input("검색할 키워드 : ")
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
result_list = []
url = base_url.format(keyword,1)
print(url)
res = requests.get(url, headers=headers)
if res.status_code == 200:
soup = BeautifulSoup(res.text)
print(soup)
last_page = soup.select_one('a.btn-last').text.strip()
print(last_page)
각페이지의 상품조회
위에서 조회한 마지막 페이지까지 크롤링한다.
error_cnt = 0
cp_url = 'https://www.coupang.com/'
for page in range(1, int(last_page)+1):
url = base_url.format(keyword, page)
res = requests.get(url, headers=headers)
if res.status_code == 200:
soup = BeautifulSoup(res.text)
item_list = soup.select('ul#productList li')
for item in item_list:
try:
item_name = item.select_one('div.name').text.strip()
link = item.select_one('a').get('href')
link = parse.urljoin(cp_url, link)
price = item.select_one('strong.price-value').text.strip()
price = ''.join(price.split(','))
result_list.append([item_name, link, price])
except:
error_cnt += 1
저장 및 결과 확인
curr = datetime.now().strftime('%Y-%m-%d')
filename = '쿠팡조회결과_{}_{}.csv'.format(keyword,curr)
df = pd.DataFrame(result_list, columns=['title','link','price'])
df.to_csv(filename, index=False, encoding='utf-8')
print('fail to save :', error_cnt)
728x90
반응형
'Data Engineering > Crawling' 카테고리의 다른 글
[Crawling] Daum, Naver 로그인 후 메일 목록 크롤링 (0) | 2020.08.05 |
---|---|
[Crawling] Selenium (0) | 2020.08.05 |
[Crawling] KOSPI 주가 크롤링 (0) | 2020.08.04 |
[Crawling] 네이버 OPEN-API를 이용한 네이버 뉴스 크롤링 (1) | 2020.08.04 |
[Crawling] 네이버 개발자 API 가입 (0) | 2020.08.04 |