Question Récupère le HTML interne d'un élément dans 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 souhaite 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

20
2018-02-15 13:56


origine


Réponses:


from lxml import etree
print(etree.tostring(root, pretty_print=True))

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


27
2018-02-15 14:05



Je crois que vous voulez utiliser le tostring() méthode:

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)

9
2018-02-15 14:08



une autre façon de le faire

x=doc.xpath("//div[@class='name']/parent::*")
print(map(etree.tostring,x))

-1
2017-08-20 14:14



Après avoir cliqué avec le bouton droit de la souris (copie, copie de xpath) sur le champ que vous voulez (dans l’inspecteur de chrome), vous obtiendrez quelque chose comme ceci:

//*[@id="specialID"]/div[12]/div[2]/h4/text()[1]

Si vous vouliez cet élément de texte pour chaque "specialID"

//*[@id="specialID"]/div/div[2]/h4/text()[1]

Vous pouvez sélectionner un autre champ et entrelacer les résultats

//*[@id="specialID"]/div/div[2]/h4/text()[1] | //*[@id="specialID"]/div/some/weird/path[95]

L'exemple pourrait être amélioré, mais il illustre bien le point:

//*[@id="mw-content-text"]/div/ul[1]/li[11]/text()

from lxml import html
import requests
page = requests.get('https://en.wikipedia.org/wiki/Web_scraping')
tree = html.fromstring(page.content)
data = tree.xpath('//*[@id="mw-content-text"]/div/ul[1]/li/a/text() | //*[@id="mw-content-text"]/div/ul[1]/li/text()[1]')
print(len(data))
for i in range(len(data)):
    print(data[i])

-2
2018-06-07 18:26