web-dev-qa-db-fra.com

Récupère le code HTML interne d'un élément en lxml

J'essaie d'obtenir le contenu HTML du nœud enfant avec lxml et xpath en Python. Comme indiqué dans le code ci-dessous, je veux trouver le contenu html de chacun des nœuds de produit. At-il des méthodes comme product.html?

productGrids = tree.xpath("//div[@class='name']/parent::*")
for product in productGrids:
    print #html content of product
26
Sudip Kafle
from lxml import etree
print(etree.tostring(root, pretty_print=True))

vous pouvez voir plus d'exemples ici: http://lxml.de/tutorial.html

34
Walty Yeung

Je pense que vous souhaitez utiliser la méthode tostring():

from lxml import etree

tree = etree.fromstring('<html><head><title>foo</title></head><body><div class="name"><p>foo</p></div><div class="name"><ul><li>bar</li></ul></div></body></html>')
for elem in tree.xpath("//div[@class='name']"):
     # pretty_print ensures that it is nicely formatted.
     print etree.tostring(elem, pretty_print=True)
12
vezult

Vous pouvez utiliser product.text_content()

0
Virako

Fonction simple pour obtenir innerHTML ou innerXML
.
Essayez-le directement https://pyfiddle.io/fiddle/631aa049-2785-4c58-bf82-eff4e2f8bedb/
.

fonction


def innerXML(elem):
    elemName = elem.xpath('name(/*)')
    resultStr = ''
    for e in elem.xpath('/'+ elemName + '/node()'):
        if(isinstance(e, str) ):
            resultStr = resultStr + ''
        else:
            resultStr = resultStr + etree.tostring(e, encoding='unicode')

    return resultStr

invocation

XMLElem = etree.fromstring("<div>I am<name>Jhon <last.name> Corner</last.name></name>.I work as <job>software engineer</job><end meta='bio' />.</div>")
print(innerXML(XMLElem))

.
Logique derrière

  • obtenir d'abord le nom de l'élément le plus à l'extérieur,
  • Obtenez ensuite tous les nœuds enfants
  • Convertissez tous les nœuds enfants en chaîne à l'aide de tostring
  • Les concaténer
0