Как извлечь все содержимое тега
определенного имени класса из HTML, используя регулярные выражения в Python?Python

Программы на Python
Anonymous
Как извлечь все содержимое тега
определенного имени класса из HTML, используя регулярные выражения в Python?

Сообщение Anonymous »

Я пишу сканер на Python, который должен извлекать содержимое всех тегов с определенным именем класса (например, «имя-класса») из HTML-документа. Я узнал, что регулярные выражения обычно не являются лучшим инструментом для анализа HTML, поскольку они могут дать сбой из-за сложности и вложенной структуры HTML. Однако в данном конкретном случае структура HTML относительно проста и предсказуема, поэтому я хотел бы попробовать использовать для этой задачи регулярные выражения. Я попробовал следующий код, но, похоже, он не работает должным образом:
Мой вопрос:
Правильно ли мое регулярное выражение? Если возникла ошибка, как ее следует изменить, чтобы гарантировать, что она захватывает только содержимое тегов с именем класса «имя класса»?
Если регулярные выражения действительно не Как лучше всего справиться с этой ситуацией, можете ли вы порекомендовать более подходящую библиотеку Python (например, BeautifulSoup) для решения этой проблемы и предоставить краткий пример кода?
  • Флаг re.DOTALL используется для того, чтобы символ . соответствовал любому символу, включая символы новой строки.
  • Флаг re.IGNORECASE не является обязательным, но может быть полезен, если вы не уверены в чувствительности к регистру имени класса.
  • Это регулярное выражение предполагает, что внутри целевых тегов нет вложенных тегов с одинаковым именем класса. Вложенные теги могут нарушить это регулярное выражение.
  • Атрибуты HTML могут располагаться в любом порядке. Могут присутствовать дополнительные атрибуты или пробелы, которые могут сделать регулярное выражение решения хрупкие.
  • Код: Выделить всё

        import re
    
    html_content = """
    
    
    Don't want this content
    Need this content
    Also need this content
    
    
    """
    
    pattern = r'(.*?)'
    matches = re.findall(pattern, html_content, re.DOTALL)
    
    for match in matches:
    print(match.strip())
    
    


Подробнее здесь: https://stackoverflow.com/questions/790 ... ml-using-r

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