[crawling/크롤링] 쿠팡 장바구니 리스트 추출하기

사용 언어 : Python (Selenium)

 

기획 의도

이전에 구매했던 걸 다시 구매하려고 할 때 어, 뭘 구매했지? 하는 경우가 종종 있었다.
특히나 쿠팡의 경우 와우 시스템 때문에 내 아이디가 아닌 다른 사람에게 부탁해서 구매하는 경우가 대다수였어서 더 그랬다.
그걸 방지하기 위해서 구매 후 쿠팡 장바구니에 넣어두었는데 30개가 되고 50개가 넘어가니 점점 ui 보기가 불편.
그렇다고 드래그 앤 드롭으로 가져오자니 링크와 이미지가 같이 복사 되는 경우가 있었는데 마침 셀레니움을  학원에서 배우게 되어 이를 활용!
주피터 노트북을 활용해서 차근차근 단계적으로 실행하였다.

 

수행 중 에러

- 학원에서는 크롤링 방지 설정 없이 기본 방법으로 배웠다. 그래서 그 방법으로 했더니 로그인이 불가능해졌다. -> 해결 방법 :  chromedriver.exe로 직접 접근

- 추출한 데이터를 csv로 그대로 저장했더니 웬 외계어가 -> 해결 방법: encoding='utf-8-sig' 사용해서 저장

code

# 기본 임포트

from selenium import webdriver
from fake_useragent import UserAgent

# 쿠팡 보안 해제 및 로그인

import time

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
user_ag = UserAgent().random
options.add_argument('user-agent=%s'%user_ag)
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("prefs", {"prfile.managed_default_content_setting.images": 2})
driver = webdriver.Chrome('chromedriver.exe', options=options)

# 크롤링 방지 설정을 undefined로 변경
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            })
            """
})

url = 'https://login.coupang.com/login/login.pang'
driver.get(url=url)
time.sleep(2)

id_input = driver.find_element_by_xpath('//*[@id="login-email-input"]')
id_input.send_keys('아이디')

pw_input = driver.find_element_by_xpath('//*[@id="login-password-input"]')
pw_input.send_keys('패스워드')

driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/div[1]/form/div[5]/button').click()
# 장바구니로 접근

driver.find_element_by_xpath('//*[@id="header"]/section/div[1]/ul/li[2]/a').click()
# 리스트 추출을 위해서 목록 전체보기 : 스크롤바 내리기

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

body = driver.find_element(By.TAG_NAME, 'body')
for _ in range(30):
    body.send_keys(Keys.PAGE_DOWN)
    time.sleep(1)
# 리스트 만들기

soup = BeautifulSoup(driver.page_source)
lis = soup.select('.cart-deal-item')
len(lis)
li = lis[0]
# 물건 1개 값 가져와보기 - 원하는 것 : 물건 이름, 가격

name = li.select_one('.product-name-part').get_text().strip()
price = li.select_one('.unit-total-price').get_text().strip()
# 전체 물건 값 가져오기 : 위의 과정을 생략하고 해당 과정을 해도 무방

data = []
for li in lis:
    name = li.select_one('.product-name-part').get_text().strip()
    price = li.select_one('.unit-total-price').get_text().strip()
    data.append({'물건명':name, '가격':price})
# 데이터 프레임화

df = pd.DataFrame(data)
df.head()

# csv로 저장하기 : 그냥 저장하면 외계어 파일이 되어버리므로 만드시 encoding='utf-8-sig'을 해주어야 함

df.to_csv('data/쿠팡.csv', encoding='utf-8-sig', index=False)

GitHub

https://github.com/swsury/Project_Mini/blob/main/python_CoupangList.ipynb

'Project' 카테고리의 다른 글

[Html] 밀리초 시계  (0) 2024.10.29
[Code] 2024 IU HEREH WORLD TOUR CONCERT ENCORE : THE WINNING 계산기  (3) 2024.08.14