IT이야기

Python에서 XPath를 사용하는 방법?

cyworld 2022. 4. 1. 22:01
반응형

Python에서 XPath를 사용하는 방법?

XPath를 지원하는 라이브러리는 무엇인가?완전한 구현이 있는가?도서관은 어떻게 이용되는가?그것의 웹사이트는 어디에 있니?

libxml2에는 다음과 같은 여러 가지 장점이 있다.

  1. 사양 준수
  2. 적극적인 개발 및 지역사회 참여
  3. 속도. 이건 정말 C 구현을 둘러싼 파이톤 포장지야.
  4. 유비쿼터스.libxml2 라이브러리는 널리 보급되어 있으며 따라서 잘 테스트되었다.

단점은 다음과 같다.

  1. 규격 준수.엄격하다.기본 네임스페이스 처리와 같은 작업은 다른 라이브러리에서 더 쉽다.
  2. 네이티브 코드 사용.이는 애플리케이션의 배포/배포 방식에 따라 문제가 될 수 있다.RPM은 이러한 통증을 완화시켜 준다.
  3. 수동 리소스 처리.아래 샘플의 freeDoc() 및 xpathFreeContext()에 대한 호출을 참고하십시오.이것은 그다지 피토닉적이지 않다.

단순 경로 선택을 수행하는 경우 요소를 그대로 유지하십시오.트리(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()

원소의 표본트리 XPath 사용


from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
    print e.get('title').text

lxml 패키지는 xpath를 지원한다.꽤 잘 작동하는 것 같은데, 비록 내가 자기 자신: 축에 문제가 있긴 했지만.아마라도 있지만 개인적으로 사용한 적은 없다.

lxml 광고처럼 들리는데;) 요소나무는 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

LXML을 사용하십시오. LXML은 libxml2와 libxslt의 전체 파워를 사용하지만 이러한 라이브러리의 기본인 Pythonic 바인딩보다 더 "피소닉" 바인딩으로 래핑하십시오.따라서, 그것은 완전한 XPath 1.0 구현을 얻는다.Native ElemenTree는 XPath의 제한된 서브셋을 지원하지만, 그것이 당신의 필요에 충분할 수도 있다.

또 다른 옵션은 py-dom-xpath로 미니돔과 원활하게 작동하며 순수 파이썬이기 때문에 애플엔진에서 작동한다.

import xpath
xpath.find('//item', doc)

사용할 수 있는 항목:

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

당신은 간단한 것을 사용할 수 있다.soupparser로부터lxml

예:

from lxml.html.soupparser import fromstring

tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")

엘리먼트 트리의 최신 버전은 XPath를 꽤 잘 지원한다.XPath 전문가가 아닌 나는 구현이 꽉 찼는지 확실히 말할 수 없지만 Python에서 작업할 때 내가 필요로 하는 대부분을 충족시켰다.나는 또한 lxml과 PyXML을 사용했는데, 표준 모듈이기 때문에 Etree가 좋다고 생각한다.

참고: 그 이후로 lxml을 찾았고, 나에게 있어 그것은 단연 파이썬에게 최고의 XML lib이다.또한 XPath도 훌륭하게 수행한다(또한 완전한 구현은 아닐 수 있음).

언제든지 CSS를 사용할 수 있는 기능과 XPATH의 힘을 결합하려면 다음을 사용하십시오.

>>> 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!'

또 다른 도서관은 4Suite: http://sourceforge.net/projects/foursuite/이다.

나는 그것이 얼마나 규격화된 것인지 모른다.하지만 그것은 내가 사용하기에 매우 효과적이었다.버려진 것 같아.

PyXML은 잘 작동한다.

어떤 플랫폼을 사용 중인지 말하지 않았지만, 우분투에서 사용 중이라면 사용 가능sudo apt-get install python-xml다른 리눅스 디스트로들도 가지고 있을 겁니다.

Mac에 있는 경우 xpath가 이미 설치되어 있지만 즉시 액세스할 수 없는 경우.설정할 수 있다PY_USE_XMLPLUSxml.xpathxml를 가져오기 전에 Python 하거나 Python 방식을 하십시오.

if sys.platform.startswith('darwin'):
    os.environ['PY_USE_XMLPLUS'] = '1'

최악의 경우 직접 지어야 할 수도 있다.이 패키지는 더 이상 유지되지 않고 여전히 잘 만들어지며 현대판 2.x피톤과 함께 작동한다.기본 문서들이 여기 있어

참조URL: https://stackoverflow.com/questions/8692/how-to-use-xpath-in-python

반응형