Python:
Разбор HTML

Как это сделать:

Давайте используем Python, чтобы вытащить некоторые данные из образца HTML с помощью библиотеки BeautifulSoup, которая делает парсинг легким. Если вы еще не установили этот пакет, сделайте это с помощью pip install beautifulsoup4.

from bs4 import BeautifulSoup

# Представим, это ваш HTML
html_doc = """
<html>
<head>
    <title>История Сони</title>
</head>
<body>
    <p class="title">
        <b>История Сони</b>
    </p>
    <p class="story">Жили-были три маленькие сестрички, и звали их
        <a href="http://example.com/elsie" class="sister" id="link1">Эльзи</a>,
        <a href="http://example.com/lacie" class="sister" id="link2">Лейси</a> и
        <a href="http://example.com/tillie" class="sister" id="link3">Тилли</a>;
        и жили они на дне колодца.</p>
</body>
</html>
"""

# Обработаем через Soup
soup = BeautifulSoup(html_doc, 'html.parser')

# Найдем тег title
title_tag = soup.title
print("Название истории:", title_tag.string)

# Найдем все теги 'a' с классом 'sister'
sister_tags = soup.find_all('a', class_='sister')
print("Имена сестер и URL-адреса:")
for sister in sister_tags:
    print(f"- Имя: {sister.string}, URL: {sister['href']}")

Вывод будет следующим:

Название истории: История Сони
Имена сестер и URL-адреса:
- Имя: Эльзи, URL: http://example.com/elsie
- Имя: Лейси, URL: http://example.com/lacie
- Имя: Тилли, URL: http://example.com/tillie

Более глубокое погружение

В заре интернета HTML анализировали с помощью регулярных выражений и большой доли надежды. Это было беспорядочно, так как HTML не всегда аккуратен и предсказуем. Тогда на сцену вышли библиотеки вроде BeautifulSoup, которые навигируют по древовидной структуре HTML, предлагая нежный способ разрезать и крошить данные.

Существуют также альтернативы, такие как lxml и html.parser, которые сам BeautifulSoup может использовать в качестве парсеров. lxml работает быстрее, но менее толерантен к плохому HTML, в то время как html.parser медленнее, но не заботится о сломанных тегах.

Под капотом эти библиотеки строят дерево разбора, превращая теги в объекты, с которыми можно взаимодействовать. BeautifulSoup похож на дружелюбный интерфейс к этим парсерам, переводя ваши вопросы — вроде “Какой заголовок?” или “Есть ли здесь ссылки?” — в действия на дереве.

См. также