BeautifulSoup이 친절하다면 lxml은 「더 빠르고 강력한」 파서입니다.
C로 작성되어 있어 대량 HTML을 처리할 때 BS4보다 몇 배 빠릅니다.
CSS·XPath 셀렉터를 둘 다 지원합니다.
설치·기본.
pip install lxml.
from lxml import html.
tree = html.fromstring(html_string).
트리 객체에 cssselect()와 xpath() 메서드가 있습니다.
CSS 셀렉터.
links = tree.cssselect("div.post > h2 a") — BeautifulSoup의 select와 거의 동일한 문법.
결과는 Element 리스트.
e.text — 텍스트, e.get("href") — 속성, e.attrib — 속성 딕셔너리.
XPath 셀렉터.
CSS보다 강력한 「조건부 탐색」 가능.
tree.xpath("//a[contains(@href, 'pdf')]") — href에 'pdf'가 포함된 모든 링크.
tree.xpath("//div[@class='price']/text()") — 텍스트만 추출.
//는 임의 깊이, /는 직계.
BeautifulSoup도 내부 파서로 lxml을 쓸 수 있습니다(BeautifulSoup(html, "lxml")).
학습 비용은 BS4가 낮고, 속도·강력함은 lxml 직접 사용이 우위.
대량 처리는 lxml, 일반 사용은 BS4가 권장됩니다.
한 줄 요약
lxml은 빠른 C 기반 파서로 CSS·XPath 둘 다 지원합니다.
XPath는 조건부 탐색에 강하고, 대량 처리 시 BeautifulSoup보다 빠릅니다.
더 알아볼 것
- XPath 문법 기초
- cssselect 패키지
- parsel — Scrapy의 셀렉터