এক্সপ্যাথকে সমর্থন করে এমন লাইব্রেরি কি? একটি পূর্ণ বাস্তবায়ন আছে? গ্রন্থাগারটি কীভাবে ব্যবহৃত হয়? এর ওয়েবসাইট কোথায়?
এক্সপ্যাথকে সমর্থন করে এমন লাইব্রেরি কি? একটি পূর্ণ বাস্তবায়ন আছে? গ্রন্থাগারটি কীভাবে ব্যবহৃত হয়? এর ওয়েবসাইট কোথায়?
উত্তর:
libxML2 এর অনেকগুলি সুবিধা রয়েছে:
ডাউনসাইড অন্তর্ভুক্ত:
আপনি যদি সহজ পথ নির্বাচন করছেন, তবে এলিমেট্রি (যা পাইথন 2.5 এর অন্তর্ভুক্ত রয়েছে) এর সাথে লেগে থাকুন । আপনার যদি পূর্ণ বিবরণী সম্মতি বা কাঁচা গতির প্রয়োজন হয় এবং নেটিভ কোড বিতরণ মোকাবেলা করতে পারেন, libxML2 দিয়ে যান।
LibxML2 এক্সপথ ব্যবহারের নমুনা
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()
এলিমেন্ট্রি ট্রিপথ ব্যবহারের নমুনা
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। এটি বেশ ভালভাবে কাজ করছে বলে মনে হচ্ছে, যদিও স্ব :: অক্ষের সাথে আমার কিছুটা সমস্যা হয়েছিল। এর রয়েছে Amara, কিন্তু আমি এটা ব্যক্তিগতভাবে ব্যবহার করেন নি।
এখানে একটি lxML বিজ্ঞাপন মত শোনাচ্ছে। ;) এলিমেন্টটি ট্রি স্ট্যান্ডের লাইব্রেরিতে অন্তর্ভুক্ত রয়েছে। ২.6 এর নীচে এবং এর এক্সপথটি বেশ দুর্বল, তবে ২.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
এলএক্সএমএল ব্যবহার করুন। এলএক্সএমএল libxML2 এবং libxslt এর সম্পূর্ণ শক্তি ব্যবহার করে তবে সেগুলি লাইব্রেরিতে আদি যে পাইথন বাইন্ডিংয়ের চেয়ে বেশি "পাইথোনিক" বাইন্ডিংগুলিতে জড় করে। যেমনটি এটি সম্পূর্ণ এক্সপথ 1.0 বাস্তবায়ন পায় gets নেটিভ এলেমেনট্রি এক্সপথের একটি সীমিত উপসেটটিকে সমর্থন করে, যদিও এটি আপনার প্রয়োজনের জন্য যথেষ্ট ভাল।
আর একটি বিকল্প পাই-ডম- এক্সপাথ, এটি মিনিডোমের সাথে নির্বিঘ্নে কাজ করে এবং খাঁটি পাইথন তাই অ্যাপিনজিনে কাজ করে।
import xpath
xpath.find('//item', doc)
context
মধ্যে find
ফাংশন আপনি একটি নতুন অনুসন্ধান প্রসঙ্গ হিসাবে অন্য xPath ফলাফলের ব্যবহারের অনুমতি দিন।
তুমি ব্যবহার করতে পার:
পাইএক্সএমএল :
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
এলিমেন্ট্রিটির সর্বশেষতম সংস্করণ এক্সপ্যাথকে বেশ ভাল সমর্থন করে। এক্সপ্যাথ বিশেষজ্ঞ না হয়ে বাস্তবায়ন পূর্ণ হয়েছে কিনা তা আমি নিশ্চিত করে বলতে পারি না তবে পাইথনে কাজ করার সময় এটি আমার বেশিরভাগ চাহিদা পূরণ করেছে। আমি এলএক্সএমএল এবং পাইএক্সএমএলও ব্যবহার করেছি এবং এট্রি খুব ভাল লাগে কারণ এটি একটি স্ট্যান্ডার্ড মডিউল।
দ্রষ্টব্য: আমি যেহেতু lxML খুঁজে পেয়েছি এবং এটি আমার জন্য পাইথনের জন্য এটি অবশ্যই সেরা এক্সএমএল লাইব। এটি এক্সপ্যাথটিও দুর্দান্তভাবে করেছে (যদিও এটি সম্ভবত সম্পূর্ণ বাস্তবায়ন নয়)।
আপনি সহজ ব্যবহার করতে পারেন soupparser
থেকেlxml
from lxml.html.soupparser import fromstring
tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
আপনি যদি কোনও মুহূর্তে সিএসএস ব্যবহার করার ক্ষমতাটির সাথে এক্সপিএটিএইচ শক্তিটি পেতে চান তবে আপনি ব্যবহার করতে পারেন 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/
আমি জানি না এটি কতটা অনুমানযোগ্য l তবে এটি আমার ব্যবহারের জন্য খুব ভাল কাজ করেছে। এটি পরিত্যক্ত দেখাচ্ছে।
পাইএক্সএমএল ভাল কাজ করে।
আপনি কোন প্ল্যাটফর্মটি ব্যবহার করছেন তা আপনি বলেননি, তবে আপনি যদি উবুন্টুতে থাকেন তবে আপনি এটি পেতে পারেন sudo apt-get install python-xml
। আমি নিশ্চিত যে অন্যান্য লিনাক্স ডিস্ট্রোও রয়েছে।
আপনি যদি ম্যাকে থাকেন তবে এক্সপথ ইতিমধ্যে ইনস্টল করা আছে তবে তাৎক্ষণিকভাবে অ্যাক্সেসযোগ্য নয়। PY_USE_XMLPLUS
এক্সএমএল.এক্সপথ আমদানি করার আগে আপনি আপনার পরিবেশে সেট করতে পারেন বা পাইথন উপায়ে এটি করতে পারেন:
if sys.platform.startswith('darwin'):
os.environ['PY_USE_XMLPLUS'] = '1'
সবচেয়ে খারাপ ক্ষেত্রে আপনার নিজের এটি তৈরি করতে হতে পারে। এই প্যাকেজটি আর রক্ষণাবেক্ষণ করা হয় না তবে এটি জরিমানা তৈরি করে এবং আধুনিক ২.x পাইথনগুলির সাথে কাজ করে। বেসিক ডক্স এখানে ।