Разделяем CSS и HTML с помощью Python

Здравствуйте! При копировании некоторых веб страниц можно видеть огромные куски CSS стилей, находящихся в одном файле с разметкой. Все это приводит к неудобству при чтении и разборе кода. В сегодняшней статье мы рассмотрим как превратить внутренние стили страницы во внешние при помощи скрипта на Python.

Итак, код:

import os
import re

# модуль для обработки файлов
import shutil

# Создание папки для файлов стилей, если её еще нет
css_folder = "styles"
if not os.path.exists(css_folder):
    os.makedirs(css_folder)

# Чтение исходного HTML файла с явным указанием кодировки UTF-8
with open("index.html", "r", encoding="utf-8") as f:
    html_content = f.read()

# Извлечение CSS стилей из HTML
css_styles = re.findall(r'<style.*?>(.*?)</style>', html_content, re.DOTALL)

# Создание копии исходного HTML файла без стилей
shutil.copyfile("index.html", os.path.join(css_folder, "updated_index.html"))

# Подключение стилей к HTML и сохранение их в отдельные файлы
for i, css in enumerate(css_styles):
    # Запись стилей в отдельный файл
    with open(os.path.join(css_folder, f"style_{i+1}.css"), "w", encoding="utf-8") as css_file:
        css_file.write(css)
    # Добавление подключения к внешнему файлу стилей в обновленный HTML файл
    with open(os.path.join(css_folder, "updated_index.html"), "a", encoding="utf-8") as updated_html_file:
        updated_html_file.write(f'<link rel="stylesheet" type="text/css" href="styles/style_{i+1}.css">')

print("Стили были вырезаны из HTML и сохранены в отдельные файлы в папке 'styles'. HTML файл был обновлен с подключением стилей.")

В данном примере для поиска тегов стилей используется модуль re для поиска регулярных выражений в Python, который подробно описан в видеокурсе Программирование на Python с Нуля до Гуру

Вы можете адаптировать данный скрипт, с учетом ваших потребностей, будь то вынос внутренних js скриптов . Таким образом мы разделили HTML разметку и CSS стили при помощи Python и его встроенных библиотек, что несомненно улучшит читаемость кода.

Источник