온라인 강의 자료모음 기업교육

XPATH 이용하기

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
AI · 풀스택 · 데이터 로드맵 Dave Lee 한 강사가 설계부터 강의까지 모두
사이트 바로가기
PhantomJS 지원 종료 안내

PhantomJS는 현재 개발이 중단되었습니다. Headless Chrome/Firefox와 Selenium WebDriver(ChromeDriver/GeckoDriver) 또는 Playwright 등 최신 대안을 사용하세요.

10. XPATH를 이용하여 크롤링하기

  • 마크업에서 요소를 정의하기 위해 path 경로를 사용하는 방법
  • find_element(By.XPATH, ...), find_elements(By.XPATH, ...) 메서드로 검색 가능
  • XPATH 문법 상세 참고
  • / : 절대경로를 나타냄
  • // : 문서내에서 검색
  • //@href : href 속성이 있는 모든 태그 선택
  • //a[@href='http://google.com'] : a 태그의 href 속성에 http://google.com 속성값을 가진 모든 태그 선택
  • (//a)[3] : 문서의 세 번째 링크 선택
  • (//table)[last()] : 문서의 마지막 테이블 선택
  • (//a)[position() < 3] : 문서의 처음 두 링크 선택
  • //table/tr/* 모든 테이블에서 모든 자식 tr 태그 선택
  • //div[@*] 속성이 하나라도 있는 div 태그 선택
In [9]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170922175202762')

title = driver.find_element(By.XPATH, "//title") # 문서내의 어떤 태그든지 가능

# head 태그 안에 있는 title 정보는 get_attribute('text') 메서드로 추출할 수 있습니다.
print(title.get_attribute('text'))
print(title.get_attribute('innerHTML'))
print(title.get_attribute('textContent'))

driver.quit()
아이폰8 출시..예전같은 열기는 없었다 | Daum 뉴스
In [62]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170922182449443')

title = driver.find_element(By.XPATH, "/html/head/title") # 절대경로

# head 태그 안에 있는 title 정보는 get_attribute('text') 메서드로 추출할 수 있습니다.
print(title.get_attribute('text'))
print(title.get_attribute('innerHTML'))
print(title.get_attribute('textContent'))

driver.quit()
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩 | Daum 뉴스
In [70]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202185812986')

title = driver.find_element(By.XPATH, "/html//title") # html 태그 내에서 다시 검색

# head 태그 안에 있는 title 정보는 get_attribute('text') 메서드로 추출할 수 있습니다.
print(title.get_attribute('text'))
print(title.get_attribute('innerHTML'))
print(title.get_attribute('textContent'))

driver.quit()
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩 | Daum 뉴스
  • 속성으로 검색하는 XPATH 문법: 태그[@속성=속성값]

고급 크롤링 기술을 체계적으로 정리한 온라인 강의입니다

현존 최강 파이썬 고급 크롤링 부트캠프

동적 웹페이지, 대용량 데이터 수집 기술

In [71]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202185812986')

#soup.find('h3', attrs = {'class' : 'tit_s'})
title_content = driver.find_element(By.XPATH, "//h3[@class='tit_view']")
print(title_content.text)

# body 안에 있는 태그 요소는 .text 로 추출할 수 있습니다.
print(driver.find_element(By.XPATH, "//div[@id='harmonyContainer']").text)

driver.quit()
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩
In [ ]:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get('http://v.media.daum.net/v/20170202180355822')

body = driver.find_element(By.XPATH, "//div[@id='harmonyContainer']")
for p in body.find_elements(By.TAG_NAME, 'p'):
    print(p.text)

driver.quit()
연습문제

http://v.media.daum.net/v/20170202180355822 페이지에서

[김익현의 미디어 읽기] '마이너리티 리포트'와 AI

를 XPATH로 크롤링해서 출력하세요