Python Academy · Lektion

Parsing af HTML med BeautifulSoup

Navigér i parse-træet, og udtræk data med selectors.

Lektion 2 af 413 trin

Parsing af HTML med BeautifulSoup er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.

Installation af BeautifulSoup

beautifulsoup4 fortolker HTML og XML. Brug parseren lxml for højere hastighed eller html.parser for brug uden afhængigheder.

# 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

Sådan finder du elementer

find(tag) returnerer det første matchende element. find_all(tag) returnerer en liste med alle matchende elementer.

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-vælgere

soup.select("css selector") bruger CSS-syntaks. soup.select_one() returnerer det første match.

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

Adgang til attributter

Få adgang til tag-attributter som til en ordbog: 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']

Navigation i parsetræet

Brug .parent, .children, .next_sibling, .previous_sibling til at gennemløbe træet.

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)

Udtrækning af tekst

tag.get_text(separator=" ", strip=True) returnerer al tekst i et tag med opryddet mellemrum.

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

Webskrabning med requests + BeautifulSoup

Hent en side med requests, og analysér den med BeautifulSoup — det klassiske makkerpar til webskrabning.

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

Håndtering af relative URL'er

Brug urllib.parse.urljoin(base, href) til at konvertere relative URL'er til absolutte URL'er.

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

Håndtering af kodninger

BeautifulSoup registrerer automatisk kodningen, men du kan angive den eller bruge r.encoding fra 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)

Ændring og serialisering

Redigér parsetræet, og konvertér det tilbage til HTML med str(tag) eller 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>

BeautifulSoups begrænsninger

BS4 fortolker statisk HTML. Det kan ikke udføre JavaScript. Brug Playwright eller Selenium til sider, der gengives med JavaScript.

# 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

Hurtigt tjek

Hvilken metode returnerer alle elementer, der matcher en CSS-vælger, i BeautifulSoup?

Opsummering

BeautifulSoup fortolker HTML til et træ, du kan navigere i. Brug find()/find_all() til at søge efter tags, select() til CSS-vælgere og get_text() til ren tekst. Kombinér det med requests til statiske sider, og brug Playwright til indhold, der gengives med JavaScript.

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
76
Lektioner
320

Ofte stillede spørgsmål

Er lektionen “Parsing af HTML med BeautifulSoup” gratis?

Ja — hele teksten til “Parsing af HTML med BeautifulSoup” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Parsing af HTML med BeautifulSoup”?

Navigér i parse-træet, og udtræk data med selectors. Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Python Academy?

Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Parsing af HTML med BeautifulSoup”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Python Academy-lektion?

Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. HTTP-forespørgsler med requests og httpx
  2. Parsing af HTML med BeautifulSoup
  3. Oprettelse af en Scrapy-spider
  4. Håndtering af JavaScript og anti-scraping-foranstaltninger
← Tilbage til Python Academy