Автор оригинала: Adi Chirilov – Sm0ke.
Привет Кодер,
Эта статья содержит краткий список с несколькими блоками кода, написанными на Python поверх библиотеки BeautifulSoup, используемой мной для обработки и манипулирования HTML-файлами.
Bootstrap BeautifulSoup
# import BS magic from bs4 import BeautifulSoup as bs, NavigableString, Tag # load the HTML file html_file = open('index.html', 'r') html_content = html_file.read() html_file.close() # initialize BS object # using the html.parser soup = bs(html_content, 'html.parser') # At this point, we can interact with the HTML tree, using BS helpers
Библиотека BeautifulSoup поддерживает более одного синтаксического анализатора (например, lxml, xml, html5lib), различия между ними становятся очевидными на плохо сформированных HTML-документах. Например, lxml добавит отсутствующие закрывающие теги для всех элементов. Для получения дополнительной информации, пожалуйста, обратитесь к выделенному разделу в документации по этой теме.
Разбор головной части
Чтобы выбрать весь ГОЛОВНОЙ узел и взаимодействовать со всеми элементами, нам нужно написать всего несколько строк кода:
header = soup.find('head') # If we want to change the title header.title.string.replace_with('Updated title')
Разбор HTML для JS скриптов
Файлы Javascript присутствуют в HTML с помощью узлов сценариев:
... ...
Чтобы проверить HTML-суп на наличие тегов скриптов, мы можем использовать помощник find_all :
for script in soup.body.find_all('script', recursive=False): # Print the path print(' JS source = ' + script[src]) # Update (normalize) the path js_path = script['src'] js_file = js_path.split('/')[-1] # extract the file name script[src] = '/assets/js/' + js_file
Разбор HTML для изображений
for img in soup.body.find_all('img'): # Print the path print(' IMG src = ' + img[src]) img_path = img['src'] img_file = img_path.split('/')[-1] # extract the file name img[src] = '/assets/img/' + img_file
Сохраните нашу работу
Все наши изменения происходят в памяти. Чтобы сделать эти изменения постоянными, нам нужно извлечь строковое представление нашего обработанного HTML из BS и сбросить его в файл для последующего использования:
processed_html = soup.prettify(formatter="html") f = open( 'index_bs.html', 'w+') f.write(processed_html) f.close
Куда идти отсюда
С помощью минимального API, построенного поверх библиотеки BS, мы можем легко автоматизировать небольшие части процесса веб-разработки для решения некоторых повторяющихся задач:
- нормализуйте HTML, чтобы легко выровнять все активы
- извлеките компоненты (карты команд, характеристики продукта, карусели) в отдельные файлы для последующего использования
- удалите жестко закодированные строки
- перевод HTML-компонентов для использования другими движками шаблонов: PUG, Jinja2
Приложения с открытым исходным кодом, построенные с использованием и синтаксического анализа HTML
- Фрактал JAMstack – Дизайн HTML5Up, закодированный в шаблоне JAMstack
- JAMstack Big Picture – HTML5 Up дизайн, закодированный в шаблоне JAMstack
- Flask Dashboard Argon – Панель администратора с открытым исходным кодом
Ресурсы, связанные с парсером HTML
- BeautifulSoup Html Документация по парсеру