Как заставить BeautifulSoup использовать мой собственный класс вместо класса bs4.element.Tag, который он использует для Python

Программы на Python
Anonymous
Как заставить BeautifulSoup использовать мой собственный класс вместо класса bs4.element.Tag, который он использует для

Сообщение Anonymous »

Я использую BeautifulSoup4 для синтаксического анализа HTML-строки в структурированный объект, но для каждого HTML-элемента (например,soup.body.title) я хотел, чтобы был атрибут с именем embed (например,soup.body.title.embed).< /p>
Поэтому я создал дочерние классы для Tag и BeautifulSoup с добавленным атрибутом embed, и хотя тип объекта корневого узла — EmbedSoup, который, как я и предполагал, является типом Soup.body< /code> — это bs4.element.Tag вместо EmbedTag.
Как убедиться, что все элементы дерева BeautifulSoup имеют тип EmbedTag, а не bs4.element.Tag? Есть ли другое решение этой проблемы?
class EmbedTag(Tag):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.embed = None # Initialize the embed attribute to None

class EmbedSoup(BeautifulSoup):
def __init__(self, *args, **kwargs):
kwargs['element_classes'] = {'tag': EmbedTag}
super().__init__(*args, **kwargs)
# Parse the HTML with the custom BeautifulSoup class
soup = EmbedSoup(html_content, 'html.parser')
type(soup) --> EmbedSoup
type(soup.body) --> bs4.element.Tag


Подробнее здесь: https://stackoverflow.com/questions/786 ... nt-tag-cla

Вернуться в «Python»