Рубрики
Без рубрики

HTML-парсер — Инструменты разработчика

Краткий список с примерами кода для анализа HTML с помощью библиотеки Python / BeautifulSoup.

Автор оригинала: 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

Кстати, мой ник Smoke , и я много пишу на Dev.to

Sm0ke - Основатель AppSeed.us