0Pricing
Python Academy · Урок

Разбор HTML с помощью BeautifulSoup

Перемещайтесь по дереву разбора и извлекайте данные с помощью селекторов.

«Разбор HTML с помощью BeautifulSoup» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Установка BeautifulSoup

beautifulsoup4 разбирает HTML и XML. Используйте парсер lxml для большей скорости или html.parser, если не хотите устанавливать дополнительные зависимости.

# pip install beautifulsoup4 lxml
from bs4 import BeautifulSoup

html = "<h1>Hello</h1><p class='intro'>World</p>"
soup = BeautifulSoup(html, "lxml")
print(soup.h1.text)   # Hello

Поиск элементов

find(tag) возвращает первый подходящий элемент. find_all(tag) возвращает список всех подходящих элементов.

from bs4 import BeautifulSoup

html = "<ul><li>A</li><li>B</li><li>C</li></ul>"
soup = BeautifulSoup(html, "lxml")
print(soup.find("li").text)       # A
print([li.text for li in soup.find_all("li")])  # [A,B,C]

CSS-селекторы

soup.select("css selector") использует синтаксис CSS. soup.select_one() возвращает первое совпадение.

from bs4 import BeautifulSoup

html = '<div class="card"><a href="/p/1">Link 1</a></div>'
soup = BeautifulSoup(html, "lxml")
print(soup.select("div.card a")[0]["href"])   # /p/1
print(soup.select_one("a")["href"])          # /p/1

Доступ к атрибутам

Обращайтесь к атрибутам тега как к элементам словаря: tag["href"], tag.get("class", []).

from bs4 import BeautifulSoup

html = '<a href="https://example.com" class="link external">Click</a>'
soup = BeautifulSoup(html, "lxml")
a = soup.find("a")
print(a["href"])           # https://example.com
print(a.get("class", [])) # ['link', 'external']

Навигация по дереву разбора

Используйте .parent, .children, .next_sibling и .previous_sibling, чтобы перемещаться по дереву.

from bs4 import BeautifulSoup

html = "<div><h2>Title</h2><p>Para</p></div>"
soup = BeautifulSoup(html, "lxml")
h2 = soup.find("h2")
print(h2.parent.name)         # div
print(h2.next_sibling.text)   # Para (next sibling)

Извлечение текста

tag.get_text(separator=" ", strip=True) возвращает весь текст внутри тега, очищая лишние пробелы.

from bs4 import BeautifulSoup

html = "<div>  <p>Hello</p>  <p> World </p>  </div>"
soup = BeautifulSoup(html, "lxml")
print(soup.div.get_text(separator=" ", strip=True))
# Hello World

Парсинг с requests и BeautifulSoup

Получите страницу с помощью requests и разберите её с помощью BeautifulSoup — это классическое сочетание для парсинга.

import requests
from bs4 import BeautifulSoup

url = "https://books.toscrape.com"
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, "lxml")

titles = [h3.find("a")["title"] for h3 in soup.select("article.product_pod h3")]
print(titles[:3])

Обработка относительных URL

Используйте urllib.parse.urljoin(base, href), чтобы преобразовать относительные ссылки в абсолютные URL.

from urllib.parse import urljoin
base = "https://example.com/products/"
href = "../about"
print(urljoin(base, href))   # https://example.com/about

Обработка кодировок

BeautifulSoup автоматически определяет кодировку, но её можно указать явно или получить с помощью r.encoding из requests.

import requests
from bs4 import BeautifulSoup

r = requests.get("https://example.com")
print(r.encoding)   # e.g. utf-8
soup = BeautifulSoup(r.content, "lxml", from_encoding=r.encoding)

Изменение и сериализация

Изменяйте дерево разбора и преобразуйте его обратно в HTML с помощью str(tag) или soup.prettify().

from bs4 import BeautifulSoup

html = "<p>Hello <b>world</b></p>"
soup = BeautifulSoup(html, "lxml")
soup.b.decompose()   # remove the <b> tag
print(str(soup.p))   # <p>Hello </p>

Ограничения BeautifulSoup

BS4 разбирает статический HTML, но не может выполнять JavaScript. Для страниц, содержимое которых формируется с помощью JS, используйте Playwright или Selenium.

# BeautifulSoup: good for static HTML
# Playwright: for JavaScript-rendered SPAs
# Scrapy: for large-scale crawls with pipelines

# pip install playwright
# playwright install
# from playwright.async_api import async_playwright

Быстрая проверка

Какой метод возвращает все элементы, соответствующие CSS-селектору, в BeautifulSoup?

Итоги

BeautifulSoup преобразует HTML в дерево, по которому можно перемещаться. Используйте find()/find_all() для поиска тегов, select() для CSS-селекторов и get_text() для получения очищенного текста. Для статических страниц объединяйте BeautifulSoup с requests, а для содержимого, формируемого с помощью JS, используйте Playwright.

Часто задаваемые вопросы

Урок «Разбор HTML с помощью BeautifulSoup» бесплатный?

Да — полный текст урока «Разбор HTML с помощью BeautifulSoup» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Разбор HTML с помощью BeautifulSoup»?

Перемещайтесь по дереву разбора и извлекайте данные с помощью селекторов. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Разбор HTML с помощью BeautifulSoup»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. HTTP-запросы с requests и httpx
  2. Разбор HTML с помощью BeautifulSoup
  3. Создание паука Scrapy
  4. Обработка JavaScript и мер против парсинга
← Назад к Python Academy