Parsing af HTML med BeautifulSoup
Navigér i parse-træet, og udtræk data med selectors.
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) # HelloSå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/1Adgang 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 WorldWebskrabning 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/aboutHå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_playwrightHurtigt 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.
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
- HTTP-forespørgsler med requests og httpx
- Parsing af HTML med BeautifulSoup
- Oprettelse af en Scrapy-spider
- Håndtering af JavaScript og anti-scraping-foranstaltninger