Nasıl Python XPath kullanılır?

oy
190

Kütüphane nedir? Tam uygulama var mı? kütüphane nasıl kullanılır? onun web sitesi nerede?

Oluştur 12/08/2008 saat 12:28
kaynak kullanıcı
Diğer dillerde...                            


12 cevaplar

oy
80

Lxml paket xpath destekler. Teknik, kendini :: ekseni ile bazı sorunlar yaşadım rağmen, oldukça iyi çalışıyor gibi görünüyor. Orada da var Amara , ama ben şahsen kullanmadım.

Cevap 12/08/2008 saat 12:40
kaynak kullanıcı

oy
3

PyXML iyi çalışıyor.

Sen Ubuntu üzerinde konum ancak eğer bunu elde edebilirsiniz, kullandığınız hangi platform demedi sudo apt-get install python-xml. Ben diğer Linux dağıtımları yanı buna sahip eminim.

Eğer bir Mac kullanıyorsanız, xpath zaten yüklü ama hemen erişilebilir değil. Ayarlayabilirsiniz PY_USE_XMLPLUSortamınızda veya xml.xpath içe önce bunu Python yolu yapın:

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

En kötü durumda kendiniz inşa etmek gerekebilir. Bu paket artık korunur ama hala iyi kurar ve modern 2.x piton ile çalışır. Temel dokümanlar vardır burada .

Cevap 12/08/2008 saat 20:34
kaynak kullanıcı

oy
9

Son sürümü elementtree oldukça iyi XPath destekler. Uygulama dolu ama Python çalışırken benim ihtiyaçlarının çoğunu tatmin etti, emin diyemem bir XPath uzmanı olmak değil. Ayrıca LXML ve PyXML kullanmak ettik ve bir standart modül olduğu için etree güzel bulmak.

NOT: Buldum LXML beri ettik ve benim için o Python için orada kesinlikle iyi XML lib bu. O (yine belki de tam olarak uygulanması olsa da) güzel yanı XPath yapar.

Cevap 14/08/2008 saat 10:48
kaynak kullanıcı

oy
115

libxml2 avantajları vardır:

  1. Uyum spec
  2. Aktif geliştirme ve bir topluluk katılımı
  3. Hız. Bu gerçekten bir C uygulaması etrafında bir piton sarıcı.
  4. Her yerde kullanım. libxml2 kütüphane yaygın ve böylece de test edilmiştir.

Downsides şunlardır:

  1. Uygunluk spec . Bu katı. Varsayılan ad taşıma gibi şeyler diğer kütüphanelerde daha kolaydır.
  2. yerli kod kullanımı. Bu uygulama dağıtımını nasıl / konuşlandırılmış senin bağlı bir ağrı olabilir. RPM bu ağrı bazı hafifletmek mevcuttur.
  3. Manuel kaynak kullanımı. freedoc () ve xpathFreeContext çağrıları aşağıdaki örnek Not (). Bu çok Pythonictir değil.

Basit yolu seçimi yapıyorsanız, sopa ile elementtree (Python 2.5 dahildir). Tam Spec uyumu veya ham hıza ihtiyacımız ve yerel kod dağıtımı ile başa çıkabilir, libxml2'nin ile gitmek.

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

Cevap 26/08/2008 saat 14:06
kaynak kullanıcı

oy
38

LXML kullanın. LXML libxml2'nin ve libxslt'nin tüm gücünü kullanır, ancak bu kütüphaneler için yerel olan Python bağlamaları daha "Pythonic" bağlamaları onları sarar. Böyle olunca tam XPath 1.0 uygulanmasını alır. o ihtiyaçlarınız için yeterince iyi olsa da Yerli ElemenTree, XPath'ın sınırlı bir kümesini destekler.

Cevap 14/11/2009 saat 00:11
kaynak kullanıcı

oy
27

Başka bir seçenek ise py-dom-xpath o minidom ile sorunsuz bir şekilde çalışır ve saf Python böylece AppEngine'de çalışır olduğunu.

import xpath
xpath.find('//item', doc)
Cevap 23/01/2010 saat 10:30
kaynak kullanıcı

oy
4

Başka kütüphane 4Suite geçerli: http://sourceforge.net/projects/foursuite/

Ne kadar spec uyumlu bilmiyorum. Ama benim kullanım için çok iyi çalıştı. Bu terk edilmiş görünüyor.

Cevap 23/08/2010 saat 13:57
kaynak kullanıcı

oy
11

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
Cevap 23/08/2010 saat 14:00
kaynak kullanıcı

oy
43

Burada bir Lxml reklam gibi görünüyor. ;) Elementtree std kütüphane yer almaktadır. 2,6 altında ve xpath altında oldukça zayıf olmakla birlikte, içinde 2.7'ye kadar geliştirilmiş :

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
Cevap 22/11/2012 saat 02:05
kaynak kullanıcı

oy
5

Sen basit kullanabilirsiniz soupparserdanlxml

Örnek:

from lxml.html.soupparser import fromstring

tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
Cevap 15/11/2015 saat 05:31
kaynak kullanıcı

oy
3

Ayrıca kullanabileceğiniz herhangi bir noktada CSS kullanma yeteneği ile kombine XPATH gücüne sahip olmak istiyorsanız 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!'
Cevap 16/12/2017 saat 22:16
kaynak kullanıcı

oy
0

Ne için ihtiyacımız olacak ise html :

import lxml.html as html
root  = html.fromstring(string)
root.xpath('//meta')
Cevap 29/05/2019 saat 16:48
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more