Задать вопрос
Qwentor
@Qwentor
Веб-программист

Как очистить HTML от всех аттрибутов?

Нужно очистить HTML-страницу от всех аттрибутов, скриптов и прочего, оставив только html-теги и текст. Есть ли что-то? Может плагин какой к Sublime Text?
  • Вопрос задан
  • 424 просмотра
Подписаться 2 Простой 8 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Фронтенд-разработчик
    11 месяцев
    Далее
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Skillbox
    Веб-вёрстка
    3 месяца
    Далее
Решения вопроса 1
Qwentor
@Qwentor Автор вопроса
Веб-программист
В итоге ничего путного для Sublime Text и других не нашел - очистил самописным скриптом на питоне:
from bs4 import BeautifulSoup, Comment
import os

def clean_html(html):
    # Парсим HTML
    soup = BeautifulSoup(html, 'html.parser')

    # Удаляем комментарии
    for element in soup(text=lambda text: isinstance(text, Comment)):
        element.extract()

    # Удаляем скрипты и стили
    for script in soup(['script', 'style', 'link', 'meta']):
        script.decompose()
    
    # Оставляем только теги без атрибутов
    for tag in soup.find_all(True):
        if tag.name == "td":
            tag.attrs = {key: value for key, value in tag.attrs.items() if key == "colspan"}
        else:
            tag.attrs = {}

        print(tag.attrs)

     # Удаляем пустые теги
    for x in soup.find_all():
        if len(x.get_text(strip=True)) == 0 and x.name not in ['br', 'img']:
            x.extract()

    # Удаляем ненужные теги, оставляя содержимое
    invalid_tags = ['p', 'span']

    for c in invalid_tags:
        while soup.find(c):
            exec(f"soup.{c}.unwrap()")
    
    return str(soup.prettify())

dir_path = os.path.dirname(os.path.realpath(__file__))
fin_path = os.path.join(dir_path, "прайс.htm")
print(fin_path)
fin = open(fin_path, "r", encoding="cp1251")
html = fin.read()

html = clean_html(html)

fin.close()
fout_path = os.path.join(dir_path, "price.htm")
print(fout_path)
fout = open(fout_path, "w+", encoding="utf-8")
fout.write(html)
fout.close()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
liaFcipE
@liaFcipE
В любом +\- редакторе есть замена по регуляркам, просто сделать замену навскидку по <\s*([a-zA-Z0-9]+)([^>]*[^\/])> на пустую строку (регулярку не проверял).

А так, скрипт на лобом языке написать 5 минут, даже без особых навыков, в эру то чатов жпт... Ему можно даже просто скормить HTML и порпросить почистить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы