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) # HelloWyszukiwanie 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/1Dostę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 WorldScraping 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/aboutObsł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_playwrightSzybkie 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
- Żądania HTTP za pomocą requests i httpx
- Parsowanie HTML za pomocą BeautifulSoup
- Budowanie spidera Scrapy
- Obsługa JavaScriptu i zabezpieczeń przed scrapingiem