셀레늄은 브라우저를 구동한다.
브라우저는 이미 많은 정보를 전송하고 있기 때문에,
코드에 헤더, 패키지 등 상당 부분을 적지 않아도 된다.
뷰티풀 수프보다 더 짧은 코드로, 더 많은 작업을 할 수 있다.
셀레늄은 사람이 실제로 웹사이트를 조작하는 방식과 같게 작동하므로
여러 작업을 보다 효과적으로 처리할 수 있다.
get()
WebDriver를 가지고 URL에서 정보를 가져오기 위해 get메서드를 쓴다.
find_element()
특정 HTML요소를 찾아서 가져오고 싶을 때 쓴다.
우선 아래처럼 By를 임포트한다.
from selenium.webdriver.common.by import By
By클래스에서 사용할 수 있는 속성은 아래와 같다.
ID = "id"
NAME = "name"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
By 클래스는 한 페이지에서 특정한 요소의 위치를 파악하는데 쓰이는데,
아래와 같이 코드를 쓰면 된다.
find_element(By.ID, "id")
find_element(By.NAME, "name")
find_element(By.XPATH, "xpath")
find_element(By.LINK_TEXT, "link text")
find_element(By.PARTIAL_LINK_TEXT, "partial link text")
find_element(By.TAG_NAME, "tag name")
find_element(By.CLASS_NAME, "class name")
find_element(By.CSS_SELECTOR, "css selector")
< 예시1 >
class가 설정되어 있는 경우
원하는 웹사이트를 연다.
from selenium import webdriver
chrome_driver_path = "C:\developer\chromedriver.exe"
#새 드라이버 만들기
driver = webdriver.Chrome(executable_path=chrome_driver_path)
URL = "https://www.amazon.com/GoPro-MAX-Waterproof-Traditional-microSDHC/dp/B07Z7C8BXR/ref=sr_1_4?crid=L9H2IOZCTCQD&keywords=gopro%2Bmax&qid=1666303865&qu=eyJxc2MiOiIzLjcwIiwicXNhIjoiMy41NyIsInFzcCI6IjMuMTcifQ%3D%3D&sprefix=gopro%2Bma%2Caps%2C419&sr=8-4&th=1"
#웹페이지 열기
driver.get(URL)
아래의 웹사이트에서 가격(449달러) 만 가져온다고 했을 때,
셀레늄을 이용하여 웹페이지의 해당 HTML 요소를 찾아보자.
가격이 표시된 곳에 오른쪽 마우스를 클릭하고, 검사를 클릭한다.
1) class name으로 가져오기
가격이 class = 'a-price-whole'로 지정되어 있다.
아래와 같이 특정 요소를 find_element로 찾아서 print해보면
HTML을 바로 제공하는 것이 아니라,
셀레늄 요소를 제공한다는 것을 알 수 있다.
price = driver.find_element(By.CLASS_NAME, "a-price-whole")
print(price)
다양한 속성, 텍스트, 태그 이름을 이용하는 경우
점 . 을 이용해야 한다.
.text
.get_attribute("속성이름")
.tag_name
등으로 HTML을 가져온다.
#특정 HTML요소 찾기
price = driver.find_element(By.CLASS_NAME, "a-price-whole")
print(price.text)
>>449
< 예시2 >
name이 있는 경우
URL = "https://www.python.org"
웹사이트에서 HTML을 확인한다.
2) name으로 가져오기
#웹페이지 열기
URL_python = "https://www.python.org"
driver.get(URL_python)
#특정 HTML요소 찾기
search_bar = driver.find_element(By.NAME, "q")
print(search_bar)
driver.quit()
find_element 메소드로 특정 HTML을 찾는다.
print(search_bar.tag_name)
>>input
print(search_bar.get_attribute("src"))
print(search_bar.size)
>>https://www.python.org/static/img/python-logo@2x.png
{'height': 82, 'width': 290}
< 예시3 >
id, class가 없는 상황에서 css selector을 이용하는 경우
3) css selector로 가져오기
hyperlink = driver.find_element(By.CSS_SELECTOR, ".slide-copy p a" )
print(hyperlink.text)
driver.quit()
>>More about defining functions in Python 3
< 예시4 >
id, class, css selector도 사용할 수 없는 상황 >> XPath
XPath
Xpath는XML에서 특정 요소와 속성을 찾기 위해 쓰인다.
경로 구조로 특정 HTML 요소의 위치를 찾는 방법은 아래와 같다.
해당 HTML> 오른쪽 마우스 클릭> 복사> XPath 전체 복사
xpath = driver.find_element(By.XPATH, '/html/body/div/footer/div[1]/div/ul/li[1]/ul/li[2]/a')
print(xpath.text)
>>Quotes
'HTML & CSS' 카테고리의 다른 글
[48-4 Selenium] 웹스크래핑 연습 문제, find_element, ID, # (0) | 2022.10.25 |
---|---|
[48-3 Selenium] class 이름이 긴 경우, class 이름에 공백이 있는 경우, find_elements, CSS_SELECTOR, 데이터프레임 (0) | 2022.10.25 |
[48-1 Selenium] 셀레늄 설치 및 사용 방법, 웹드라이버, selenium webdriver, close, quit, get (0) | 2022.10.23 |
[47-1 BeautifulSoul] 아마존에서 내가 원하는 물견 가격 찾고, 이메일 보내기 (0) | 2022.10.23 |
[46-1 BeautifulSoup] 특정 연도의 top100 노래 목록 웹스크래핑하기 (0) | 2022.10.23 |