Подтвердить что ты не робот

Получить внутренний HTML элемента в lxml

Я пытаюсь получить содержимое HTML дочернего node с lxml и xpath в Python. Как показано ниже в коде, я хочу найти html-содержимое каждого из узлов продукта. Есть ли у него какие-либо методы, например product.html?

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

Ответ 1

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

здесь вы можете увидеть больше примеров: http://lxml.de/tutorial.html

Ответ 2

Я считаю, что вы хотите использовать метод 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)

Ответ 3

другой способ сделать это

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

Ответ 4

После щелчка правой кнопкой мыши (скопировать, скопировать xpath) в нужное поле (в хромовом инспекторе) вы можете получить что-то вроде этого:

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

Если вам нужен этот текстовый элемент для каждого "specialID"

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

Вы можете выбрать другое поле, и оно будет чередовать результаты

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

Пример может быть улучшен, но он иллюстрирует точку:

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