0Pricing
Python Academy · Lekcja

Parsowanie HTML za pomocą BeautifulSoup

Proszę poruszać się po drzewie parsowania i wyodrębniać dane za pomocą selektorów.

Parsowanie HTML za pomocą BeautifulSoup to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Instalowanie BeautifulSoup

beautifulsoup4 służy do parsowania HTML i XML. Parsera lxml należy używać ze względu na szybkość, a html.parser — gdy potrzebne jest rozwiązanie bez dodatkowych zależności.

# 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

Wyszukiwanie elementów

find(tag) zwraca pierwszy pasujący element. find_all(tag) zwraca listę wszystkich pasujących elementów.

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]

Selektory CSS

soup.select("css selector") używa składni CSS. soup.select_one() zwraca pierwsze dopasowanie.

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

Dostęp do atrybutów

Do atrybutów tagu należy uzyskiwać dostęp tak jak do elementów słownika: 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']

Poruszanie się po drzewie parsowania

Do przechodzenia po drzewie należy używać .parent, .children, .next_sibling i .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)

Wydobywanie tekstu

tag.get_text(separator=" ", strip=True) zwraca cały tekst znajdujący się wewnątrz tagu, z uporządkowanymi odstępami.

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

Scraping za pomocą requests + BeautifulSoup

Stronę należy pobrać za pomocą requests, a następnie sparsować ją przy użyciu BeautifulSoup — to klasyczny duet do scrapingu.

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])

Obsługa względnych adresów URL

urllib.parse.urljoin(base, href) należy używać do przekształcania względnych linków w bezwzględne adresy URL.

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

Obsługa kodowania

BeautifulSoup automatycznie wykrywa kodowanie, ale można określić je ręcznie lub użyć r.encoding z 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)

Modyfikowanie i serializowanie

Drzewo parsowania można modyfikować, a następnie z powrotem przekształcić je w HTML za pomocą str(tag) lub 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>

Ograniczenia BeautifulSoup

BS4 parsuje statyczny HTML. Nie może wykonywać kodu JavaScript. W przypadku stron renderowanych przez JS należy użyć Playwright lub 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

Szybkie sprawdzenie

Jaka metoda zwraca w BeautifulSoup wszystkie elementy pasujące do selektora CSS?

Podsumowanie

BeautifulSoup parsuje HTML do postaci drzewa, po którym można się poruszać. Do wyszukiwania tagów należy używać find()/find_all(), do selektorów CSS — select(), a do pobierania oczyszczonego tekstu — get_text(). W przypadku stron statycznych należy połączyć BeautifulSoup z requests, a do treści renderowanych przez JS użyć Playwright.

Często zadawane pytania

Czy lekcja „Parsowanie HTML za pomocą BeautifulSoup” jest bezpłatna?

Tak — pełny tekst „Parsowanie HTML za pomocą BeautifulSoup” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Parsowanie HTML za pomocą BeautifulSoup”?

Proszę poruszać się po drzewie parsowania i wyodrębniać dane za pomocą selektorów. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Parsowanie HTML za pomocą BeautifulSoup”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Żądania HTTP za pomocą requests i httpx
  2. Parsowanie HTML za pomocą BeautifulSoup
  3. Budowanie spidera Scrapy
  4. Obsługa JavaScriptu i zabezpieczeń przed scrapingiem
← Powrót do Python Academy