아니요, BeautifulSoup 자체는 XPath 표현식을 지원하지 않습니다.
또 다른 라이브러리, LXML는 , 수행 지원의 XPath 1.0. 그것은이 BeautifulSoup로 호환 모드 는 노력 할게요 및 HTML에게 수프가하는 방법을 깨진 구문 분석합니다. 그러나 기본 lxml HTML 파서 는 깨진 HTML을 파싱하는 것과 똑같이 잘 수행하며 더 빠르다고 생각합니다.
문서를 lxml 트리로 구문 분석 한 후에는 .xpath()
메서드를 사용하여 요소를 검색 할 수 있습니다 .
try:
# Python 2
from urllib2 import urlopen
except ImportError:
from urllib.request import urlopen
from lxml import etree
url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
response = urlopen(url)
htmlparser = etree.HTMLParser()
tree = etree.parse(response, htmlparser)
tree.xpath(xpathselector)
도있다 전용 lxml.html()
모듈추가 기능이 있습니다.
위의 예 에서는 파서가 스트림에서 직접 읽도록하는 것이 응답을 큰 문자열로 먼저 읽는 것보다 더 효율적이므로 response
객체를에 직접 전달했습니다 lxml
. requests
라이브러리 에서 동일한 작업을 수행하려면 투명 전송 압축 해제를 활성화 한 후 객체 를 설정 stream=True
하고 전달 하려고합니다 .response.raw
import lxml.html
import requests
url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
response = requests.get(url, stream=True)
response.raw.decode_content = True
tree = lxml.html.parse(response.raw)
관심을 가질만한 것은 CSS 선택기 지원입니다 . 이 CSSSelector
클래스는 CSS 문을 XPath 표현식으로 변환하여 검색을 td.empformbody
훨씬 쉽게 만듭니다 .
from lxml.cssselect import CSSSelector
td_empformbody = CSSSelector('td.empformbody')
for elem in td_empformbody(tree):
# Do something with these table cells.
온전한 순환 : BeautifulSoup 자체 는 매우 완벽한 CSS 선택기를 지원합니다 .
for cell in soup.select('table#foobar td.empformbody'):
# Do something with these table cells.