Lxml.html Python

144
26 августа 2019, 17:30

Я не понимаю, как сделать нормальный вывод тега

URL = 'https://imgur.com/iTZUi2Q'# + random_e(7)
page = requests.get(URL, headers={'User-Agent': 'Mozilla/5.0'})
parsed_body = html.document_fromstring(page.text)
image = parsed_body.xpath('//div')

Вывод:

[<Element div at 0x35fcf90>, <Element div at 0x35fcfc0>, <Element div at 0x3642030>, <Element div at 0x3642060>]

А хотелось по типу:

['<div id="test">',.....]
Answer 1

Используйте метод tostring, пример:

from lxml import html
...
def to_str(root):
    return html.tostring(root, encoding='unicode')
images = parsed_body.xpath('//div')
print([to_str(node) for node in images])

PS.

Наглядный пример использования tostring:

Для парсинга html:

from lxml import html
root = html.fromstring('<p>Hello<br>world!</p><br>')
print(html.tostring(root))                      # b'<div><p>Hello<br>world!</p><br></div>'
print(html.tostring(root, encoding='unicode'))  # <div><p>Hello<br>world!</p><br></div>
print(html.tostring(root, pretty_print=True))   # b'<div>\n<p>Hello<br>world!</p>\n<br>\n</div>\n'
print(html.tostring(root, encoding='unicode', pretty_print=True))
# <div>
# <p>Hello<br>world!</p>
# <br>
# </div>

Для парсинга xml:

from lxml import etree
root = etree.fromstring('<a><b>Hello</b><c>world!</c></a>')
print(etree.tostring(root))                      # b'<a><b>Hello</b><c>world!</c></a>'
print(etree.tostring(root, encoding='unicode'))  # <a><b>Hello</b><c>world!</c></a>
print(etree.tostring(root, pretty_print=True))   # b'<a>\n  <b>Hello</b>\n  <c>world!</c>\n</a>\n'
print(etree.tostring(root, encoding='unicode', pretty_print=True))
# <a>
#   <b>Hello</b>
#   <c>world!</c>
# </a>
READ ALSO
HTML5 audio. Не работает перемотка в Хроме

HTML5 audio. Не работает перемотка в Хроме

Есть html5 audio тэг в котором проигрывается mp3 с удаленного сервера (запись разговора телефонии)Подгружается и проигрывает нормально

194
Не меняется цвет лэйбла(радиобаттон) при :checked!

Не меняется цвет лэйбла(радиобаттон) при :checked!

Делаю слайдер с помощью CSS: радиобаттоны + к ним лейблы(чтобы, через них стилизовать)Все работает - слайды переключаются при :checked

110
Как добавить и удалить блок div?

Как добавить и удалить блок div?

Форма, в которой есть div с id="field", где addElement() добавляет элементы в div с id='content'Мне нужно задействовать кнопки "Удалить" div c id="field" и "Добавить" такой...

153
Редирект на домен при выборе города

Редирект на домен при выборе города

Есть такая задача: три домена, клоны, разница в базе товаров, витрины разные (особенность обмена с 1С)Необходимо сделать так, чтобы при первом...

142