Xpath'ı destekleyen kütüphaneler nelerdir? Tam bir uygulama var mı? Kütüphane nasıl kullanılır? Web sitesi nerede?
Xpath'ı destekleyen kütüphaneler nelerdir? Tam bir uygulama var mı? Kütüphane nasıl kullanılır? Web sitesi nerede?
Yanıtlar:
libxml2'nin birçok avantajı vardır:
Dezavantajları şunları içerir:
Basit yol seçimi yapıyorsanız, ElementTree (Python 2.5'e dahil olan) ile devam edin. Tam spesifikasyona veya ham hıza ihtiyacınız varsa ve yerel kodun dağıtımıyla başa çıkabiliyorsanız, libxml2 ile devam edin.
Libxml2 XPath Kullanımı Örneği
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 Kullanımı Örneği
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 paket destekleri XPath. Ben kendi ekseni ile bazı sorun vardı rağmen, oldukça iyi çalışıyor gibi görünüyor. Orada da var Amara , ama ben şahsen kullanmadım.
Burada bir lxml reklamı gibi görünüyor. ;) ElementTree, std kütüphanesine dahil edilmiştir. 2.6 altında ve altında xpath oldukça zayıf, ama 2.7 + 'da çok gelişmiş :
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 kullanın. LXML, libxml2 ve libxslt'nin tam gücünü kullanır, ancak bunları bu kütüphanelere özgü Python bağlarından daha "Pythonic" bağlarına sarar. Bu nedenle, tam XPath 1.0 uygulamasını alır. Yerel ElemenTree, gereksinimleriniz için yeterince iyi olsa da, sınırlı bir XPath alt kümesini destekler.
Başka bir seçenek py-dom-xpath , minidom ile sorunsuz bir şekilde çalışır ve saf Python'dur, bu nedenle appengine üzerinde çalışır.
import xpath
xpath.find('//item', doc)
context
İçinde find
işlevin yeni bir arama bağlam gibi başka bir xpath sonucu kullanalım.
Kullanabilirsiniz:
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
denfrom xml.dom.ext.reader import Sax2
Elementtree'nin en son sürümü XPath'i oldukça iyi destekliyor. Bir XPath uzmanı değilim, uygulamanın dolu olup olmadığını kesin olarak söyleyemem, ancak Python'da çalışırken ihtiyacımın çoğunu karşıladı. Ayrıca lxml ve PyXML kullanıyorum ve standart bir modül olduğu için güzel buluyorum.
NOT: O zamandan beri lxml buldum ve benim için kesinlikle Python için en iyi XML lib. XPath'ı da güzel yapıyor (yine de belki tam bir uygulama değil).
Sen basit kullanabilirsiniz soupparser
danlxml
from lxml.html.soupparser import fromstring
tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
XPATH'ın gücünün, herhangi bir noktada CSS kullanma yeteneğiyle birleştirilmesini istiyorsanız şunları kullanabilirsiniz 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()
Başka bir kütüphane 4Suite: http://sourceforge.net/projects/foursuite/
Spesifikasyonlara ne kadar uyumlu olduğunu bilmiyorum. Ama benim kullanımım için çok iyi çalıştı. Terk edilmiş görünüyor.
PyXML iyi çalışıyor.
Hangi platformu kullandığınızı söylemediniz, ancak Ubuntu'daysanız sudo apt-get install python-xml
. Eminim diğer Linux dağıtımlarında da var.
Mac kullanıyorsanız, xpath zaten yüklüdür, ancak hemen erişilemez. PY_USE_XMLPLUS
Xml.xpath dosyasını içe aktarmadan önce ortamınızda ayarlayabilir veya Python yolu yapabilirsiniz:
if sys.platform.startswith('darwin'):
os.environ['PY_USE_XMLPLUS'] = '1'
En kötü durumda, bunu kendiniz oluşturmanız gerekebilir. Bu paket artık korunmuyor, ancak yine de iyi bir yapı oluşturuyor ve modern 2.x Pythons ile çalışıyor. Temel dokümanlar burada .