평범한 이야기들

[Selenium] 파이썬 셀레니움을 이용해 네이버 데이터랩 쇼핑인사이트 인기검색어 가져오기 본문

평범한 개발 이야기/ETC

[Selenium] 파이썬 셀레니움을 이용해 네이버 데이터랩 쇼핑인사이트 인기검색어 가져오기

songsariya 2023. 7. 4. 16:35
728x90

 

셀레니움을 이용한 네이버 데이터랩 쇼핑인사이트 인기검색어 가져오기

 

 최근에는 파이썬 셀레니움을 이용해서 작업을 많이 하고 있습니다. 그래서 예전에 포스팅했었던 php-webdriver를 이용해 네이버 데이터랩 인기검색어 가져오는 부분을 파이썬으로 해보려고 합니다.

 

2021.01.20 - [평범한 개발 이야기/ETC] - [Selenium] php-webdriver를 이용해 네이버 데이터랩 쇼핑인사이트 인기검색어 가져오기

 

 제가 작업하는 코드는 ChromeDriverManager와 Undectected Chromedriver 가 설치되어있어야 합니다.

설치방법은 아래와 같습니다.

# selenium 설치
pip install selenium 
# webdriver-manager 설치
pip install webdriver-manager
# undetected-chromedriver 설치
pip install undetected-chromedriver

 

네이버 데이터랩 소스 확인하기

  데이터랩 쇼핑인사이트에서 필요한 소스 정보를 확인하기 위해 크롬 개발자 모드를 이용했습니다. 해당 위치에 마우스 우클릭 후 검사 메뉴를 클릭하면 개발자툴이 나오면서 해당 위치의 소스를 볼 수 있습니다.

xpath는 소스가 변경되면 xpath도 변경되는 모습을 상태를 많이 봐 이번에는 CSS SELECTOR를 이용했습니다.

해당 위치의 CSS SELECTOR는 아래와 같습니다.

ul[class="rank_top1000_list"]>li

li 태그가 나열되어 있기 때문에 각 엘리먼트에 접근하기가 쉽습니다.

 

 20개의 인기검색어를 가져온 후 다음 정보를 가져오기 위해서는 다음 페이지로 이동해야 합니다. 해당 화면에서는 TOP 500 옆에 버튼으로 존재합니다. 해당 버튼의 소스를 보면 class 이름이 'btn_page_next'로 되어있고 해당 class는 페이지 소스에서는 단 하나만 나오기 때문에 class를 이용해서 엘리먼트에 접근해 주면 됩니다.

파이썬 소스

import time
import platform

from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

import undetected_chromedriver as uc

# 운영체제에 맞게 ctrl, cmd 키 변경 (mac os 호환)
def paste_key(element):
	if os_info != 'Darwin' :
		element.send_keys(Keys.CONTROL, "v")
	else :
		element.send_keys(Keys.COMMAND, "v")

# 인기 검색어 가져오기
def getKeyword(driver):
	elements = driver.find_elements(By.CSS_SELECTOR, 'ul[class="rank_top1000_list"]>li')

	retVal = list()
	for element in elements:			
		keyword = str(element.text).split("\n")
		retVal.insert( len(retVal), {"idx":keyword[0], "keyword":keyword[1]} )

	return retVal

		
# 인기 검색어 다음 페이지 이동
def clickNextPage(driver):
	time.sleep(1)
	driver.find_element(By.CLASS_NAME, 'btn_page_next').click()
	time.sleep(1)


# 크롬드라이버 셋팅
chrome_service = ChromeService(ChromeDriverManager().install())
chrome_options = Options()

chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1920,1080')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')

driver = uc.Chrome(service=chrome_service, options=chrome_options)

# 운영체제 정보 가져오기
os_info = platform.system()

driver.get("https://datalab.naver.com/shoppingInsight/sCategory.naver")
driver.implicitly_wait(10) # 처음에만 셋팅 암묵적 10초 대기

time.sleep(5)

data = getKeyword(driver)

print(data)

time.sleep(5)

clickNextPage(driver)

time.sleep(5)

data = getKeyword(driver)

print(data)

driver.quit()

위 프로그램대로 실행하면 아래와 같은 결과 화면을 볼 수 있습니다.

이렇게 셀레니움을 통해서 쉽게 정보를 가져올 수 있습니다.

728x90
Comments