Я пытаюсь создать программу на python, которая очистит мою таблицу стилей от любых неиспользуемых классов.Я хочу удалить классы, которые не используются в DOm, из таблицы стилей.
Мне удалось извлечь все используемые классы из DOM, используя следующий код:
Прямо сейчас яесли это так, найденные классы будут удалены из файла, чтобы я мог видеть, что он работает.Я планирую переключить его, чтобы сохранить классы и удалить все, что не является частью DOM, как указано выше.
from flask import Flask, render_template
import requests
import cssutils
from bs4 import BeautifulSoup
'''
Scrape the given website's html for all class and id use cases within the tags.
Append all classes and ids to a dictionary for later use cases.
Remove all items in stylesheet that aren't in the dictionary / being used in the html.
@author Francesco Hayes
@date May 24, 2019
TODO:
Maybe use the join method to concatenate the rules in between the styles.
'''
WEB_URL = 'http://127.0.0.1:5500/website/index.html'
def get_page_classes(url):
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
return [value for element in soup.find_all(class_=True) for value in element["class"]]
def get_file_classes(file):
with open(file) as fp:
return fp.read()
def convert_classes(classes, file_classes):
new_lines = []
new_classes = []
# loop over existing lines, do your changes, and build up a list of new_line
for i in range(len(classes)):
classes[i] = '.' + classes[i]
new_classes.append(classes[i])
print(new_classes)
i = 0
while i < len(file_classes):
if file_classes[i] in new_classes:
new_lines.append(file_classes[i])
i += 1
while file_classes[i][0] != '.':
print(file_classes[i])
new_lines.append(file_classes[i])
i += 1
else:
i += 1
return new_lines
def write_lines(file, lines):
with open(file, 'w') as fp:
for line in lines:
fp.writelines(line)
page_classes = get_page_classes(WEB_URL)
print('Classes from Website: ', page_classes)
file_classes = get_file_classes("./website/style.css")
file_classes = file_classes.split()
print('\nClasses from Stylesheet: ', file_classes)
new_lines = convert_classes(page_classes, file_classes)
print('\nThe new stylesheet: ', new_lines)
write_lines("test.css", new_lines)
Я попытался перебрать его как список и разделить классы по их индикатору: "".однако затем я сталкиваюсь с необходимостью переписать новые отфильтрованные стили в файл.Каждый класс будет нуждаться в '.'снова.
По сути, я пытаюсь автоматизировать процесс, который избавит меня от необходимости делать это вручную.
Надеюсь, это имеет смысл, а если нет, то я попытаюсь объяснить снова.Спасибо!