날씨 데이터를 수집할 일이 생겼다.
산업에서 사용되는 날씨 데이터의 종류? 규격은 생각보다 다양하다. 그 중 epw라는 규격이 있음을 알게 되었다. 상당히 까다롭지만 이러한 규격으로 98개국 3000개 도시에 대한 날씨 데이터를 무료로 제공하는 곳이 있다. 하지만 이곳은 동적 페이지로 구성되어 있었다.
그렇게 기억 저 편에 고히? 잠들어있던 셀레니움을 다시 꺼내 볼 기회를 갖게 되었다.
이 과정에서 이전에는 몰랐던( 무작정 따라했거나, 알고 있던 방식으로만 했거나) XPath(XML Path Language)를 사용하게 되었다.
dom script에서 id, classs 또는 tag기반으로 selecting하지 않고 마치 상대/절대 좌표(x,y축)위치를 기반으로 selecting하는 정말이지 Path라는 키워드가 딱- 어울리는 느낌이었다.
덕분에 동적 페이지에서; 매번 갯수와 순서가 바뀌는 목록에서; 특정 항목만(목록의 이름이 epw인 a태그 element) 추출하는 과정에서도 반복문을 돌릴 필요가 없이 원하는 요소를 지정할 수 있다.
그리고 셀레니움이 이전과 달리 매우 매우 많이 업데이트 되었다. 평소에 사용하는 크롬 브라우저가 11.5이상이라면 별도의 프로그램 설치도 필요없다.
주요 내용 :
1. 의존성(패키지) 관리
`pip install selenium`
`pip install webdriver-manager`
2. 기본 세팅(import)
import os
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
# Set up driver and load the webpage
chrome_path = "C:/Users/userName/chromedriver.exe"
driver = webdriver.Chrome()
page_url = "스크래핑하려는 타깃 페이지 url"
driver.get(page_url)
3. 동적 페이지에서; 매번 갯수와 순서가 바뀌는 목록에서; 특정 항목만(목록의 이름이 epw인 a태그 element) 선택하기
1) 언어의 문장 구조가 XPath 방식(문법)을 사용하고 있지만 사용하는 방식(방법은) Dom script와 유사한 맥락의 방식 예
download_button = driver.find_element(By.XPATH, '//a[@class="내가 원하는; a Tag;에 선언되어 있는 class이름"]')2) 언어의 문장 구조가 XPath스러운 예
download_button = driver.find_element(By.PARTIAL_LINK_TEXT, 'epw')
참고 자료 : 어지간한 것은 아래 링크에 다 나와있는 것 같다.
XPATH란? 셀레니움(Sellenium) XPath로 쉽게 요소 선택하기!
파이썬 셀레니움 사용법, 특정 요소를 선택하는 방법은?!
01. selenium 4
selenium : https://www.selenium.dev/documentation/webdriver/
WebDriver
WebDriver drives a browser natively, learn more about it.
www.selenium.dev
