반응형

셀레니움, Yes24 베스트셀러 1위 제목 가져오기 

 

글. 수알치 오상문

 

예제에서 크롬 브라우저를 사용하므로 Chrome 웹 드라이버 다운로드해서 프로젝트 폴더에 복사해야 한다. 

 

다음처럼 필요한 패키지도 설치한다.

이 예제에서 모두 사용하는 것은 아니지만, 크롤링하려면 기본으로 설치해두자.

 

pip3 install selenium
pip3 install bs4
pip3 install lxml

 

크롤링 순서는 다음과 같다.

 

1) 예스24에 접속

2) 베스트셀러 코너 선택

3) 1위 항목 선택

4) 제목 가져오기 

5) 보너스: 최종 화면에서 상단 오른쪽에 알림 화면이 하나 뜨는데 닫아보자.

 

[소스 코드] 
from urllib.request import urlopen
from urllib.parse import quote_plus
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time


# 알림창/경고창 닫는 함수 
def closeOthersWindow(driver):
    #print(driver.window_handles)
    
    # 알림창 닫기 
    if type(driver.window_handles) is dict:
        tabs = drive.window_handles
        time.sleep(0.3)
        while len(tabs):
            driver.switch_to_window(tabs[1])
            driver.close()
            tabs = drive.window_handles
        driver.switch_to_window(tabs[0])
        WebDriverWait(driver, 1)
        time.sleep(0.3)
    else:
        print("No tabs")        

    try: # 경고창 닫기
        WebDriverWait(driver, 3).until(EC.alert_is_present())
        alert = borwser.switch_to_alert
        alert.dismiss()
        alert.accept()
        wait = WebDriverWait(driver, 1)
        time.sleep(0.3)         
    except:
        print("No alert")   


# --------- TEST MAIN ----------------------
url = r"https://www.yes24.com/"
driver = None

try:
    driver = webdriver.Chrome()
    driver.get(url)
    WebDriverWait(driver, 5)
    time.sleep(0.5)
    
    html = driver.page_source
    soup = BeautifulSoup(html, "lxml")
    time.sleep(1)
except Exception as e:
    print("Error:", e)
else:
    if "No results found." in driver.page_source:  # 결과창 없음 
        print("Page not found") 
        driver.quit()
        exit(1)
    
    try:
        # 베스트 셀러 페이지로 이동  
        driver.find_element(By.XPATH,
            r'/html/body/div/div[1]/div[1]/div/div[3]/div[2]/dl/dd/ul[1]/li[1]/a').click()
        wait = WebDriverWait(driver, 5)
        time.sleep(0.5)

        # 첫 번째 책 제목 가져오기 
        title = driver.find_element(By.XPATH, r'//*[@id="bestList"]/ol/li[1]/p[1]').text
        
        # 첫 번째 책 클릭
        driver.find_element(By.XPATH, r'//*[@id="bestList"]/ol/li[1]').click()
        wait = WebDriverWait(driver, 5)
        time.sleep(0.5)        

        # 알림 닫기 (안 닫아도 크롤링에 지장 없다. 그냥 닫아보자 ^^)
        driver.find_element(By.XPATH, r'//*[@id="divYes24SCMEvent"]/div[2]/div[2]/a').click()
        
    except Exception as e:
        print("Error:", e)
    else:
        print("책 제목:", title)
finally:
    input("진행 종료?: ")  # 종료 대기    
    driver.quit()  # 웹 드라이버 종료
    

[실행 결과]

책 제목: 라이프해커 자청의 인생 역주행 공식
진행 종료?: 

 

반응형

+ Recent posts