웹크롤링 - . XPATH를 이용하여 크롤링하기

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 태그 선택
from selenium import webdriver

# driver = webdriver.PhantomJS('C:/dev_python/phantomjs-2.1.1-windows/bin/phantomjs.exe') # 윈도우
driver = webdriver.PhantomJS('/usr/local/Cellar/phantomjs/2.1.1/bin/phantomjs') # 맥
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'))
driver.quit()
아이폰8 출시..예전같은 열기는 없었다 | Daum 뉴스
실습 (함께 작성해보는 코드)
from selenium import webdriver

# driver = webdriver.PhantomJS('C:/dev_python/phantomjs-2.1.1-windows/bin/phantomjs.exe') # 윈도우
driver = webdriver.PhantomJS('/usr/local/Cellar/phantomjs/2.1.1/bin/phantomjs') # 맥
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'))
driver.quit()
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩 | Daum 뉴스
from selenium import webdriver

# driver = webdriver.PhantomJS('C:/dev_python/phantomjs-2.1.1-windows/bin/phantomjs.exe') # 윈도우
driver = webdriver.PhantomJS('/usr/local/Cellar/phantomjs/2.1.1/bin/phantomjs') # 맥
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'))
driver.quit()

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

# driver = webdriver.PhantomJS('C:/dev_python/phantomjs-2.1.1-windows/bin/phantomjs.exe') # 윈도우
driver = webdriver.PhantomJS('/usr/local/Cellar/phantomjs/2.1.1/bin/phantomjs') # 맥
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']")

# body 안에 있는 태그 요소는 .text 로 추출할 수 있습니다. (출력이 잘 안되면, 둘다 써보셔도 좋습니다.)
print (title_content.text)
driver.quit()
'포켓몬고' 상륙 1주일.. 대한민국 곳곳이 들썩
from selenium import webdriver

# driver = webdriver.PhantomJS('C:/dev_python/phantomjs-2.1.1-windows/bin/phantomjs.exe') # 윈도우
driver = webdriver.PhantomJS('/usr/local/Cellar/phantomjs/2.1.1/bin/phantomjs') # 맥
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()
연습문제3 http://v.media.daum.net/v/20170202180355822 페이지에서

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

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