2010-07-21 5 views
0

Je travaille en Python avec HTML qui ressemble à ceci. Je suis avec l'analyse syntaxique lxml, mais pourrait tout aussi heureusement pyquery:Python analyse: lxml pour obtenir une partie du texte d'un tag

<p><span class="Title">Name</span>Dave Davies</p> 
<p><span class="Title">Address</span>123 Greyfriars Road, London</p> 

Sortant est mort facile « Nom » et « Adresse », quelle que soit la bibliothèque que j'utilise, mais comment puis-je obtenir le reste du texte - c'est-à-dire 'Dave Davies'?

Répondre

1

Chaque élément peut avoir un text and a tail attribute (dans le lien, recherchez le mot "queue"):

import lxml.etree 

content='''\ 
<p><span class="Title">Name</span>Dave Davies</p> 
<p><span class="Title">Address</span>123 Greyfriars Road, London</p>''' 


root=lxml.etree.fromstring(content,parser=lxml.etree.HTMLParser()) 
for elt in root.findall('**/span'): 
    print(elt.text, elt.tail) 

# ('Name', 'Dave Davies') 
# ('Address', '123 Greyfriars Road, London') 
+0

Parfait - merci! – AP257

0

Jetez un oeil à BeautifulSoup. Je viens de commencer à l'utiliser, donc je ne suis pas un expert. Du haut de ma tête:

import BeautifulSoup 

text = '''<p><span class="Title">Name</span>Dave Davies</p> 
      <p><span class="Title">Address</span>123 Greyfriars Road, London</p>''' 

soup = BeautifulSoup.BeautifulSoup(text) 

paras = soup.findAll('p') 

for para in paras: 
    spantext = para.span.text 
    othertext = para.span.nextSibling 
    print spantext, othertext 

[Out]: Name Dave Davies 
     Address 123 Greyfriars Road, London 
+0

Merci pour votre inscription. J'aime aussi BeautifulSoup, mais je crois qu'il n'est plus maintenu, donc je passe à lxml/pyquery. – AP257

2

Une autre méthode - en utilisant XPath:

>>> from lxml import html 
>>> doc = html.parse(file) 
>>> doc.xpath('//span[@class="Title"][text()="Name"]/../self::p/text()') 
['Dave Davies'] 
>>> doc.xpath('//span[@class="Title"][text()="Address"]/../self::p/text()') 
['123 Greyfriars Road, London'] 
Questions connexes