본문 바로가기
PROGRAMMING/Python

[PYTHON] 파이썬 lxml로 스크레이핑 진행

by HYUNHP 2021. 10. 10.
반응형

안녕하세요 파이썬과 관련하여 추가적으로 필요한 정보가 있으시면,

DATA101에서 확인 가능하십니다.

감사합니다.


안녕하세요, Hello

python을 활용하여 lxml을 사용해 HRML에서 데이터를 추출하고자 합니다.

lxml에는 여러 가지 API가 있으며, 이 중에서 HTML을 파싱(Parsing)할 때는, lxml.html을 사용합니다.

* 파싱(parsing) : 페이지(문서, html 등)에서 내가 원하는 데이터를 특정 패턴이나 순서로 추출해 가공하는 것

내용 및 코드는 위키북스의 '파이썬을 이용한 웹 크롤링과 스크레이핑'을 참조해서 작성했습니다.


lxml은 libxml2와 libxslt을 사용한 C확장 라이브러리입니다.

최초 실행 시에는 설치가 되어 있지 않기에, 전용 패키지를 설치합니다.

 

import lxml.html
from urllib.request import urlopen

full_book_list = 'http://www.hanbit.co.kr/store/books/full_book_list.html'

# parse() 함수로 파일 경로 지정 가능
tree = lxml.html.parse(urlopen(full_book_list))

 

# 파싱하면 ElementTree 객체가 추출됨
type(tree)

# 결과값: lxml.etree._ElementTree

 

# getroot() 메서드로 html 루트 요소의 HtmlElement 객체 추출
html = tree.getroot()
type(html)
# 결과값: lxml.html.HtmlElement

 

# HtmlElement의 xpath() 메세드로 XPath와 일치하는 요소 목록 추출
html.xpath('//li')

 

 

# HtmlElement의 cssselect()의 메서드로 선택자와 일치하는 요소 목록 추출
html.cssselect('li')

 

 

# HTML 파일을 읽어 들이고, getroot() 메서드로, HtmlElement 객체 생성 
tree = lxml.html.parse(urlopen(full_book_list))
html = tree.getroot()

# cssselect() 메서드로 a 요소의 리스트를 추출하고 반복 진행
for a in html.cssselect('a'):
    # href 속성과 글자 추출
    print(a.get('href'), a.text)

 


■ 마무리

python을 통해 HTML을 파싱하는 lxml.html에 대해서 살펴봤습니다.

감사합니다.

위 포스팅은 카카오 티스토리, 네이버 블로그에도 동일하게 업로드합니다.

반응형

댓글