Получить html под тегом, используя htmlparser python

Я хочу получить весь html под тегом и использовать HTMLParser. Я могу в настоящее время получить данные между тегами, а следующий – мой код

class LinksParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.recording = 0 self.data = '' def handle_starttag(self, tag, attributes): if tag != 'span': return if self.recording: self.recording += 1 return for name, value in attributes: if name == 'itemprop' and value == 'description': break else: return self.recording = 1 def handle_endtag(self, tag): if tag == 'span' and self.recording: self.recording -= 1 def handle_data(self, data): if self.recording: self.data += data 

Я также хочу, чтобы html-теги внутри ввода, например

 <span itemprop="description"> <h1>My First Heading</h1> <p>My first <br/><br/>paragraph.</p> </span> 

когда они предоставляются в качестве входных данных, я получаю только данные с тегами. Есть ли какой-либо метод, с помощью которого я могу получить целые html между тегами?

2 Solutions collect form web for “Получить html под тегом, используя htmlparser python”

Можно использовать xml.etree.ElementTree.TreeBuilder для использования API etree для поиска / управления элементом <span> :

 import sys from HTMLParser import HTMLParser from xml.etree import cElementTree as etree class LinksParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.tb = etree.TreeBuilder() def handle_starttag(self, tag, attributes): self.tb.start(tag, dict(attributes)) def handle_endtag(self, tag): self.tb.end(tag) def handle_data(self, data): self.tb.data(data) def close(self): HTMLParser.close(self) return self.tb.close() parser = LinksParser() parser.feed(sys.stdin.read()) root = parser.close() span = root.find(".//span[@itemprop='description']") etree.ElementTree(span).write(sys.stdout) 

Вывод

 <span itemprop="description"> <h1>My First Heading</h1> <p>My first <br /><br />paragraph.</p> </span> 

Для печати без тега parent (root) <span> :

 sys.stdout.write(span.text) for child in span: sys.stdout.write(etree.tostring(child)) # add encoding="unicode" on Python 3 

Вот что-то, что выполняет работу на основе тестовых данных, которые вы предоставили с минимальными изменениями в вашем существующем коде (при условии, что это в основном делает то, что вы хотите уже). Вероятно, вы захотите расширить его, чтобы более эффективно использовать самозакрывающиеся теги:

 from HTMLParser import HTMLParser class LinksParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.recording = 0 self.data = '' self.self_closing_tags = ("br",) def handle_starttag(self, tag, attributes): if tag not in ('span',) + self.self_closing_tags: self.data += "<%s" % (tag,) if attributes: self.data += " " + " ".join('%s="%s"' % (k, v) for k, v in attributes) self.data += ">" return if self.recording: self.recording += 1 return for name, value in attributes: if name == 'itemprop' and value == 'description': break else: return self.recording = 1 def handle_endtag(self, tag): if tag == 'span' and self.recording: self.recording -= 1 elif tag in self.self_closing_tags: self.data += "<%s/"> % (tag,) else: self.data += "</%s>" % (tag,) def handle_data(self, data): if self.recording: self.data += data 

Учитывая это как ввод:

 <span itemprop="description"> <h1>My First Heading</h1> <p>My first <br/><br/>paragraph.</p> </span> 

выход:

 <h1>My First Heading</h1> <p>My first <br/><br/>paragraph.</p> 
Interesting Posts

Извлечение глагольных стеблей из списка глаголов

Python проверяет, одинаковы ли все элементы списка

Как нормализовать список положительного и отрицательного десятичного числа до определенного диапазона

Как игнорировать каталоги при запуске Django collectstatic?

Рабочий процесс Sphinx и JavaScript

Как вычислить r-квадрат с использованием Python и Numpy?

f.write vs print >> f

Перемещение булевых значений в список Python

Сценарии LMMS от Python

перестроить массив python на основе общих элементов

Как распечатать результаты сопоставления регулярных выражений в python 3?

Писериальный буфер заполняется быстрее, чем я могу читать

Django: ValueError: поиск невозможен для модели, на которую ссылается полевая учетная запись. Пользовательский интерфейс: auth.User

Присвоить значение отдельной ячейке в двухмерном массиве python

Регистрация Python для нескольких обработчиков на разных уровнях журнала?

Python - лучший язык программирования в мире.