वे पुस्तकालय कौन सी हैं जो Xpath का समर्थन करते हैं? क्या पूर्ण कार्यान्वयन है? पुस्तकालय का उपयोग कैसे किया जाता है? इसकी वेबसाइट कहाँ है?
वे पुस्तकालय कौन सी हैं जो Xpath का समर्थन करते हैं? क्या पूर्ण कार्यान्वयन है? पुस्तकालय का उपयोग कैसे किया जाता है? इसकी वेबसाइट कहाँ है?
जवाबों:
libxml2 के कई फायदे हैं:
डाउनसाइड में शामिल हैं:
यदि आप सरल पथ चयन कर रहे हैं, तो एलीमेंटट्री (जो पायथन 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 पैकेज का समर्थन करता है XPath। यह बहुत अच्छी तरह से काम करने लगता है, हालांकि मुझे स्व :: अक्ष के साथ कुछ परेशानी हुई है। अमारा भी है , लेकिन मैंने इसे व्यक्तिगत रूप से इस्तेमाल नहीं किया है।
यहाँ एक 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
LXML का उपयोग करें। LXML ने libxml2 और libxslt की पूरी शक्ति का उपयोग किया है, लेकिन उन "पायथन" बाइंडिंग को पायथन बाइंडिंग की तुलना में अधिक लपेटता है जो उन पुस्तकालयों के मूल निवासी हैं। जैसे, इसे पूर्ण XPath 1.0 कार्यान्वयन मिलता है। Native ElemenTree XPath के सीमित उपसमूह का समर्थन करता है, हालाँकि यह आपकी आवश्यकताओं के लिए पर्याप्त हो सकता है।
एक अन्य विकल्प पीआईई -डोम- एक्सपैथ है, यह मिनिडोम के साथ मूल रूप से काम करता है और शुद्ध पायथन है इसलिए एपेंगिन पर काम करता है।
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
एलीमेंट्री का नवीनतम संस्करण एक्सपीथ को बहुत अच्छी तरह से समर्थन करता है। XPath विशेषज्ञ नहीं होने के कारण मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि यदि कार्यान्वयन पूर्ण है, लेकिन पायथन में काम करने के दौरान इसने मेरी अधिकांश जरूरतों को पूरा किया है। मैंने lxml और PyXML का भी उपयोग किया है और मुझे यह बहुत अच्छा लगता है क्योंकि यह एक मानक मॉड्यूल है।
नोट: मैंने तब से lxml पाया है और मेरे लिए यह निश्चित रूप से पायथन के लिए सबसे अच्छा एक्सएमएल काम है। यह XPath अच्छी तरह से करता है (हालांकि फिर से शायद पूर्ण कार्यान्वयन नहीं)।
आप soupparser
से सरल का उपयोग कर सकते हैंlxml
from lxml.html.soupparser import fromstring
tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
यदि आप XPATH की शक्ति को किसी भी बिंदु पर CSS का उपयोग करने की क्षमता के साथ संयुक्त करना चाहते हैं, जिसका आप उपयोग कर सकते हैं 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()
एक अन्य पुस्तकालय 4 साइट है: http://sourceforge.net/projects/foursuite/
मुझे नहीं पता कि यह कैसे युक्ति-संगत है। लेकिन इसने मेरे इस्तेमाल के लिए बहुत अच्छा काम किया है। यह परित्यक्त दिखता है।
PyXML अच्छा काम करता है।
आपने यह नहीं कहा कि आप किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं, हालाँकि यदि आप उबंटू में हैं तो आप इसे प्राप्त कर सकते हैं sudo apt-get install python-xml
। मुझे यकीन है कि अन्य लिनक्स डिस्ट्रोस के पास भी है।
यदि आप एक मैक पर हैं, तो xpath पहले से इंस्टॉल है, लेकिन तुरंत पहुंच योग्य नहीं है। PY_USE_XMLPLUS
Xml.xpath को आयात करने से पहले आप अपने वातावरण में सेट कर सकते हैं या इसे पायथन तरीके से कर सकते हैं:
if sys.platform.startswith('darwin'):
os.environ['PY_USE_XMLPLUS'] = '1'
सबसे खराब स्थिति में आपको इसे स्वयं बनाना पड़ सकता है। यह पैकेज अब बनाए नहीं रखा गया है, लेकिन फिर भी ठीक बनाता है और आधुनिक 2.x पायथन के साथ काम करता है। बेसिक डॉक्स यहां हैं ।