Включите закрывающий тег HTML из вывода BeautifulSoup soup.findall - PullRequest
0 голосов
/ 21 февраля 2020

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

Фрагмент моего кода на данный момент:

data = '<h1>Overview</h1> <p>Several methods can be used...</p><ol><li>hello world</li></ol><br>'

tags = []

soup = BeautifulSoup(data, "html.parser")

for tag in soup.find_all():

    tags.append(tag.name)

tag_string = '-'.join(tags)

print(tags)

print(tag_string)

Текущий вывод:

['h1', 'p', 'ol', 'li', 'br']

h1-p-ol-li-br

Желаемый вывод (показать закрытие тег, чтобы я мог видеть это в правильном порядке):

['h1', '/h1', 'p', '/p', 'ol', 'li', '/li', '/ol', 'br']
h1-/h1-p-/p-ol-li-/li-/ol-br

1 Ответ

1 голос
/ 21 февраля 2020

Это должно вам помочь,

from html.parser import HTMLParser

tagsOrder = []

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        tagsOrder.append(tag)

    def handle_endtag(self, tag):
        tagsOrder.append("/"+tag)

parser = MyHTMLParser()

print(parser.feed('<h1>Overview</h1> <p>Several methods can be used...</p><ol><li>hello world</li></ol><br>'))
print(tagsOrder)
print('-'.join(tagsOrder))

Результат

['h1', '/h1', 'p', '/p', 'ol', 'li', '/li', '/ol', 'br']
h1-/h1-p-/p-ol-li-/li-/ol-br

Для получения дополнительной информации, пожалуйста, go в официальной документации на Пример HTML Приложение Parser

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...