2013-02-15 6 views
19

Ich versuche, den HTML-Inhalt der Kind-Knoten mit Lxml und Xpath in Python zu bekommen. Wie im folgenden Code gezeigt, möchte ich den HTML-Inhalt der einzelnen Produktknoten finden. Hat es irgendwelche Methoden wie product.html?Holen Sie sich die innere HTML-Code eines Elements in lxml

productGrids = tree.xpath("//div[@class='name']/parent::*") 
for product in productGrids: 
    print #html content of product 

Antwort

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

können Sie weitere Beispiele hier sehen: http://lxml.de/tutorial.html

+1

Dank. Es war das, wonach ich suchte. –

+2

Denken Sie daran, es hat einen optionalen Parameter 'encode' verwenden Sie so:' etree.tostring (xxxxx, encoding = 'Unicode') ' – shellbye

+2

Das ist * äußere * HTML. –

8

Ich glaube, Sie tostring() Methode verwenden möchten:

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) 
-1

ein anderer Weg, um dieses

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

Nach rechts

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

Wenn Sie diesen Textelement für jeden „Special ID“ wollte

//*[@id="specialID"]/div/div[2]/h4/text()[1] 
: Klick (Kopie, Kopie XPath) auf dem spezifischen Gebiet Sie (in Chrom des Inspektors) wollen, können Sie so etwas wie dieses erhalten

Sie könnten ein anderes Feld auswählen und es werden die Ergebnisse

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

Beispiel verbessert werden könnte verschachteln, aber es zeigt den Punkt:

//*[@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]) 
Verwandte Themen