일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 라즈베리파이
- 옵G
- 라라벨
- 맥
- php
- 맛집
- 20.04
- 회고
- MySQL
- 옵티머스g
- 업비트
- 우분투 20.04
- 제주도
- 옵지
- Laravel
- 셀레니움
- TiL
- Selenium
- 코드이그나이터
- Ubuntu 20.04
- 우분투
- FMS
- 라즈비안
- 옵티머스 g
- Raspberry Pi
- ubuntu
- 프레임워크
- upbit
- codeigniter
- C
- Today
- Total
평범한 이야기들
[Selenium] 파이썬 셀레니움을 이용해 네이버 데이터랩 쇼핑인사이트 인기검색어 가져오기 본문
셀레니움을 이용한 네이버 데이터랩 쇼핑인사이트 인기검색어 가져오기
최근에는 파이썬 셀레니움을 이용해서 작업을 많이 하고 있습니다. 그래서 예전에 포스팅했었던 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()
위 프로그램대로 실행하면 아래와 같은 결과 화면을 볼 수 있습니다.
이렇게 셀레니움을 통해서 쉽게 정보를 가져올 수 있습니다.