4 votes

Xpath normalize-space

Je me sens bête. Je suis nouveau en Python & xpath. J'essaie d'extraire le texte complet 'Open Box Price: $1079.99' en utilisant xpath.

     Open Box Price:$1079.99

    Regular Price: $1499.98

Mais je n'y arrive pas. le texte s'arrête à. Voici mon code

doc = lxml.html.fromstring(r.content)
elements = doc.xpath(item_xpath)
print elements[1].find('div[3]/p[1]/text()[normalize-space()]')

4voto

Jon Clements Points 51556

Une base pour le XPath que vous voulez est d'utiliser descendant-or-self - ajustez le résultat comme vous le souhaitez :

>>> doc.xpath('//p[1]/descendant-or-self::text()')
['\n    ', ' Open Box Price:', '$1079.99', '\n    ']
>>> doc.xpath('//p[2]/descendant-or-self::text()')
['\n    Regular Price: ', '$1499.98', '\n    ']

Ou comme vous le faites avec lxml.html, vous pourriez utiliser text_content()

paras = doc.xpath('//p'): # or findall etc...
for para in paras:
    print para.text_content()

1voto

Dimitre Novatchev Points 147842

Il suffit d'utiliser, en supposant que le contexte initial (nœud actuel) est le parent de div:

normalize-space(div/p[1]/strong)

Vérification basée sur XSLT:

     ""

Lorsque cette transformation est appliquée sur le document XML suivant (le document fourni corrigé pour être bien formé et ensuite encadré dans un élément html):

           Open Box Price:$1079.99

    Regular Price: 
            $1499.98

L'expression XPath est évaluée à partir de l'élément de haut niveau (html) et le résultat de l'évaluation est copié (encadré de guillemets) dans la sortie:

"Open Box Price:$1079.99"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X