Xpath를 지원하는 라이브러리는 무엇입니까? 완전한 구현이 있습니까? 도서관은 어떻게 사용됩니까? 웹 사이트는 어디에 있습니까?
Xpath를 지원하는 라이브러리는 무엇입니까? 완전한 구현이 있습니까? 도서관은 어떻게 사용됩니까? 웹 사이트는 어디에 있습니까?
답변:
libxml2 는 여러 가지 장점이 있습니다.
단점은 다음과 같습니다.
간단한 경로 선택을하고 있다면 ElementTree (Python 2.5에 포함되어 있음)를 고수하십시오 . 전체 사양 준수 또는 원시 속도가 필요하고 원시 코드 배포에 대처할 수있는 경우 libxml2로 이동하십시오.
libxml2 XPath 사용 샘플
import libxml2
doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//*")
if len(res) != 2:
print "xpath query: wrong node set size"
sys.exit(1)
if res[0].name != "doc" or res[1].name != "foo":
print "xpath query: wrong node set value"
sys.exit(1)
doc.freeDoc()
ctxt.xpathFreeContext()
ElementTree XPath 사용 샘플
from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
print e.get('title').text
from xml.etree.ElementTree import ElementTree
여기에 lxml 광고처럼 들립니다. ;) ElementTree는 std 라이브러리에 포함되어 있습니다. 2.6 이하에서 xpath는 매우 약하지만 2.7 이상에서는 크게 향상되었습니다 .
import xml.etree.ElementTree as ET
root = ET.parse(filename)
result = ''
for elem in root.findall('.//child/grandchild'):
# How to make decisions based on attributes even in 2.6:
if elem.attrib.get('name') == 'foo':
result = elem.text
break
또 다른 옵션은 py-dom-xpath 이며, minidom과 완벽하게 작동하며 순수한 Python이므로 appengine에서 작동합니다.
import xpath
xpath.find('//item', doc)
context
의 find
기능을 사용하면 새 검색 컨텍스트와 같은 다른 XPath는 결과를 사용할 수 있습니다.
당신이 사용할 수있는:
PyXML :
from xml.dom.ext.reader import Sax2
from xml import xpath
doc = Sax2.FromXmlFile('foo.xml').documentElement
for url in xpath.Evaluate('//@Url', doc):
print url.value
libxml2 :
import libxml2
doc = libxml2.parseFile('foo.xml')
for url in doc.xpathEval('//@Url'):
print url.content
ImportError: No module named ext
에서from xml.dom.ext.reader import Sax2
elementtree 의 최신 버전 은 XPath를 꽤 잘 지원합니다. XPath 전문가가 아니기 때문에 구현이 가득 찼는 지 확실하게 말할 수는 없지만 Python에서 작업 할 때 대부분의 요구를 충족했습니다. 나는 또한 lxml과 PyXML을 사용했으며 표준 모듈이기 때문에 etree가 훌륭하다는 것을 알았습니다.
참고 : 나는 lxml을 찾았으며 파이썬을위한 최고의 XML 라이브러리입니다. XPath도 훌륭하게 수행합니다 (다시 완전한 구현은 아니지만).
당신은 간단한 soupparser
을 사용할 수 있습니다lxml
from lxml.html.soupparser import fromstring
tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
언제라도 CSS를 사용할 수있는 기능과 XPATH의 기능을 결합하려면 다음을 사용할 수 있습니다 parsel
.
>>> from parsel import Selector
>>> sel = Selector(text=u"""<html>
<body>
<h1>Hello, Parsel!</h1>
<ul>
<li><a href="http://example.com">Link 1</a></li>
<li><a href="http://scrapy.org">Link 2</a></li>
</ul
</body>
</html>""")
>>>
>>> sel.css('h1::text').extract_first()
'Hello, Parsel!'
>>> sel.xpath('//h1/text()').extract_first()
'Hello, Parsel!'
//li/a/text()
다른 라이브러리는 4Suite입니다 : http://sourceforge.net/projects/foursuite/
사양이 얼마나 적합한 지 모르겠습니다. 그러나 그것은 내 용도에 매우 효과적이었습니다. 버려진 것 같습니다.
PyXML 이 잘 작동합니다.
어떤 플랫폼을 사용하고 있는지 말하지 않았지만 Ubuntu를 사용하는 경우와 함께 사용할 수 있습니다 sudo apt-get install python-xml
. 다른 리눅스 배포판에도 마찬가지입니다.
Mac을 사용하는 경우 xpath가 이미 설치되어 있지만 즉시 액세스 할 수는 없습니다. PY_USE_XMLPLUS
xml.xpath를 가져 오기 전에 환경에서 설정 하거나 Python 방식으로 수행 할 수 있습니다 .
if sys.platform.startswith('darwin'):
os.environ['PY_USE_XMLPLUS'] = '1'
최악의 경우 직접 빌드해야 할 수도 있습니다. 이 패키지는 더 이상 유지 관리되지 않지만 여전히 잘 빌드되고 최신 2.x Python에서 작동합니다. 기본 문서는 여기에 있습니다 .