사용 언어 : 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 |