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

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

Нужно очистить HTML-страницу от всех аттрибутов, скриптов и прочего, оставив только html-теги и текст. Есть ли что-то? Может плагин какой к Sublime Text?
  • Вопрос задан
  • 348 просмотров
Подписаться 2 Простой 8 комментариев
Решения вопроса 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()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
это функция html sanitizer, гугли его под свой язык, под ide такое не встречал, хотя скорее всего есть извращенцы что написали это на регулярках, тоже гугли.
Ответ написан
Комментировать
liaFcipE
@liaFcipE
В любом +\- редакторе есть замена по регуляркам, просто сделать замену навскидку по <\s*([a-zA-Z0-9]+)([^>]*[^\/])> на пустую строку (регулярку не проверял).

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

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

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