De fleste scraping-værktøjer, der får opmærksomhed i år, vil gerne styre en browser. trafilatura gør ikke. Det er et rent Python-bibliotek, der læser statisk HTML, finder ud af hvilke blokke der faktisk er artiklen, og smider resten væk. Den snævre opgave — udtræk af hovedindhold — er hele pointen, og det er noget biblioteket har klaret siden længe før nogen brugte udtrykket “LLM-ready markdown”.
Jeg kørte version 2.1.0 igennem et fast sæt testfiler på Python 3.14, og artikeltesten var den, der satte sig fast hos mig. Jeg indkapslede en blok ægte tekst i den sædvanlige sidekonstruktion — en login-prompt, en “Subscribe”-påmindelse, navigationslinks og en copyright-footer — og trafilatura leverede titel, alle tre afsnit i brødteksten, forfatteren og datoen, uden et eneste af de standardelementer. Ingen browser, ingen regler pr. website, ét funktionskald. Der er dog en hage, og den viser sig i det øjeblik, man beder den om noget struktureret. Mere om det nedenfor (det er et designvalg, ikke en fejl).
Hvad trafilatura er, og den antagelse man bør slippe
Den officielle one-liner kalder det et “Python- og kommandolinjeværktøj til at indsamle tekst og metadata på nettet: crawling, scraping, extraction”, med output som CSV, JSON, HTML, Markdown, TXT eller XML. Det er en bred beskrivelse, men den nedtoner den del, der faktisk adskiller værktøjet. Værdien ligger ikke i crawl-hjælperne eller de seks outputformater. Den ligger i indholdsudtræk: HTML ind, hovedartiklens tekst ud, sidechrome væk.
Her er mentalmodellen, fordi den forklarer både styrken og grænsen i ét greb. De fleste scrapers, du peger mod en side, er selector-baserede. Du siger: “hent elementet med klassen product-price”, og de returnerer det, der ligger på den adresse. trafilatura arbejder den modsatte vej. Det læser hele dokumentet og vurderer, hvilke blokke der er artiklen, og hvilke der er boilerplate, ved hjælp af heuristikker i indholdet i stedet for en selector, du selv har skrevet. Derfor kræver det ingen konfiguration pr. site for at rydde op på en side, du aldrig har set før. Og det er netop derfor, det ikke kan returnere et struktureret katalog: der er intet schema, intet feltkort, kun en vurdering af, hvad der tæller som indhold. Det er en ekstraktor, ikke en parser, du peger og skyder med.
Det er også oprigtigt letvægtsagtigt. Ren Python, ingen headless browser, ingen Chromium-binær, der ligger og fylder i cachen, ingen Playwright-installation, der venter på at overraske dig ved første kørsel. Det lyder måske som en lille ting, indtil du kører udtræk på tusindvis af URL’er, og hver megabyte afhængighed og hver subprocess er noget, du skal drifte. Projektet ligger omkring 6,26k stjerner pr. 2026-07-09 (adbar/trafilatura) — et langt mindre repo end de browser- og crawler-frameworks, det ofte bliver sat i samme kategori som, hvilket siger noget om dets omfang, ikke om kvaliteten.
Opsætningen er den korte sektion — og det er i sig selv en anmeldelse
Installationen er én linje, og der er intet at advare om, hvilket faktisk er værd at nævne. pip install trafilatura i en frisk virtualenv trak et enkelt, rent pakke-træ på Python 3.14 — ingen browser at hente, intet efter-installationsstep, ingen transitive afhængigheder, der eksploderede i omfang. Jeg har testet nok af den slags biblioteker til at vente på den anden sko: den 150 MB store browserpakke, man først opdager ved første kørsel, den native extension, der ikke vil kompilere, den ekstra [fetchers]-gruppe, som ingen fortalte om. Med trafilatura faldt skoen aldrig.
Versionen, som pip gav mig (2.1.0), matcher den aktuelle release, udgivet 2026-06-07, så ingen af tallene nedenfor har et “du testede noget gammelt”-asterisk. Det er ikke altid tilfældet i denne kategori — mange af de tungere værktøjer, jeg har kigget på, var en stor version bagud, da jeg kørte dem. Her er den testede build og den udgivne build den samme.
Hands-on: hvad ekstraktoren faktisk returnerede
Jeg kørte trafilatura mod testfiler, der var lavet til både at ramme dens stærke side og dens grænse. Artikeltesten er den, der afgjorde min vurdering.

Jeg tog en lokal artikeltestfil og begravede det rigtige indhold i støj — en login-prompt, en “Subscribe”-call-to-action, navigationslinks og en copyright-footer, præcis den slags boilerplate som en naiv scraper hiver med sammen med brødteksten. trafilatura returnerede titlen plus alle tre af tre afsnit i brødteksten, og hver eneste unikke boilerplate-markør — Login, Subscribe, Copyright — var fraværende i outputtet. Oven i teksten trak den også forfatter og dato korrekt fra sidens metadata. Resultatet kom ud som .txt, .md og .json fra ét og samme kald.

Den detalje med flere formater fortjener et øjeblik. Ét udtræk gav både ren tekst, Markdown og JSON. Markdown-sporet er netop det “LLM-ready text”-trin, alle jagter lige nu: send en rodet side ind, få ren prosa med bevaret struktur, og giv det videre til en model. trafilatura gør det uden nogen browser i loopet, hvilket er en mere stille vej til samme output, som browserstyrede værktøjer bruger en hel rendering-stack for at frembringe.
Så kom den offentlige test. Jeg pegede den mod en live produktside — en Books to Scrape-produktside — og den returnerede 1.324 tegn ren tekst plus Markdown: beskrivelsesblokken, læsbar, uden sidechrome omkring. Og da jeg gav den en side, der svarede med HTTP 500, returnerede fetch_url None i stedet for at kaste en fejl. Ingen crash, ingen stack trace at blive fanget af. Den kedelige, men korrekte fejladfærd er præcis det, man ønsker i noget, der kører uovervåget på en planlagt tidsplan.
Forbeholdene
Tre stykker, og hvert af dem indsnævrer, hvor værktøjet passer.

Først og vigtigst: trafilatura er en indholds-ekstraktor, ikke en struktureret scraper. Jeg kørte den på en katalog-testfil med 12 produkter. Den returnerede alle 12 produktnavne — som tekst — og præcis 0 strukturerede rækker (478 tegn flad tekst). Navnene og priserne er i outputtet; de er bare ikke felter. Hvis du har brug for [{name, price, rating}, …], er det det forkerte værktøj, og ingen konfigurationsflag ændrer det. Det er et designvalg om, hvad værktøjet er til, ikke en fejl, man skal rapportere.

For det andet: det renderer ikke JavaScript. Det læser statisk HTML. Peg det mod en klient-renderet single-page app, og du får det, serveren sendte, før JS blev kørt, hvilket ofte ikke er noget brugbart. Kombinér det med en renderer, hvis dine mål er JS-tunge — trafilatura gør ikke den halvdel for dig, og den påstår heller ikke at gøre det.
For det tredje en begrænsning i min egen evidens. Den offentlige ekstraktionstest ovenfor lænede sig op ad en produktbeskrivelsesblok, ikke en ægte nyhedsartikel, fordi det offentlige sandbox-miljø, jeg brugte (toscrape-familien), kun består af kataloger og ingen nyhedssider. Det rene resultat fra artikeloprydningen kommer fra en kontrolleret lokal testfil. Jeg har tillid til det resultat — boilerplate-fjernelsen er entydig og reproducerbar — men en produktside er ikke bevis for nyhedsartikel-kvalitet, så jeg vil ikke kalde det det.
For delvist at lukke det hul kørte jeg en separat, bevidst ubedømt demonstration på to rigtige artikelsider og læste gemte testfiler, så kørslen blev deterministisk. På Wikipedia-artiklen “Web scraping” reducerede trafilatura brødteksten fra 230.049 bytes rå HTML til 26.673 bytes udtrukket indhold (et body-to-raw-forhold på 0,116), og alle fire kontrollerede site-chrome-markører — “Jump to content”, “Privacy policy”, “Powered by MediaWiki”, “This page was last edited” — var væk. På en arkiveret Wikinews-artikel gik den fra 79.716 bytes til 2.200 (et forhold på 0,028), og alle fem kontrollerede markører blev fjernet. Titel, dato og hostname kom tilbage udfyldt på begge; forfatter og sitenavn kom tilbage som null på begge, og det rapporterer jeg som mangler i stedet for at skjule dem. To ting er vigtige at holde adskilt her: byte-forholdet måler, hvor meget markup og chrome der blev fjernet, ikke ekstraktionsnøjagtighed, og begge sider er fra samme MediaWiki-familie, så det er en demonstration på rigtige artikler, ikke et repræsentativt korpus.
Hvad angår nøjagtighed, vil jeg henvise til ekstern evidens i stedet for at lade som om, jeg målte det selv. trafilatura har sin egen evalueringsside, og den ligger øverst blandt open source-løsninger med den bedste F1 (omkring 0,945) i ScrapingHub article-extraction benchmark sammenlignet med værktøjer som readability-lxml (~0,887). To ærlige forbehold til det tal: det kommer fra det benchmark, ikke fra min test, og den rapporterede ~0,945-værdi er knyttet til en ældre 0.5.1-linje i kilden, ikke den 2.1.0-version, jeg kørte. Se det som ekstern benchmark-evidens for, hvorfor værktøjet har sit ry som ekstraktor, ikke som en måling fra denne anmeldelse.
Fordele og ulemper
Fordele:
- Den reneste artikel-ekstraktion i mit sæt — titel plus alle 3 af 3 afsnit, og hver eneste boilerplate-markør (Login/Subscribe/Copyright) fjernet.
- Trækker forfatter- og datometadata korrekt sammen med brødteksten.
- Output i flere formater fra ét kald: txt, Markdown og JSON — Markdown er et reelt LLM-ready text-trin.
- Letvægtsinstallation i ren Python — ingen browser, ingen binær download, ingen væg af afhængigheder.
- Fejler elegant:
fetch_urlreturnererNoneved HTTP 500 i stedet for at kaste en exception. - Testet version er identisk med den aktuelle release (2.1.0) — ingen versionsforskydning.
- Apache-2.0-licens — permissiv og kommercielt venlig.
Ulemper:
- Ikke en struktureret scraper: katalogtesten gav 12 navne som tekst og 0 typede rækker. Intet schema, ingen felter.
- Ingen JavaScript-rendering — kun statisk HTML; kræver en separat renderer til klientside-sider.
- Metadata er delvis på nogle sider: forfatter og sitenavn kom tilbage som null på begge rigtige artikeltestfiler.
- Min offentlige prosa-test brugte en produktbeskrivelsesblok, ikke en reel nyhedsartikel.
- Den indbyggede crawl/sitemap-spider og CSV/XML-outputformaterne blev ikke testet i denne omgang, så jeg gør ingen påstande om dem.
Hvem det er til — og hvem der bør springe over
trafilatura er målrettet den, hvis problem er: “Jeg har URL’er, og jeg vil have den rene artikeltekst, uden navigationsbjælken, cookie-banneret og nyhedsbrevspåmindelsen.” At bygge et tekstdatasæt, sende sider til en model, arkivere læsbart indhold, køre NLP på webartikler — det er banen, og værktøjet er rigtig godt der. Hvis du vil have et letvægts, browserløst trin, der forvandler rodet HTML til ren Markdown eller JSON, så installér det og kom videre med dagen.
Spring det over, hvis det, du faktisk har brug for, er struktureret udtræk: produktrækker med pris, typede records, key: value-felter. Det giver dig tekst, ikke tabeller — katalogtesten fandt navnene, men ikke rækkerne, og det ændrer sig ikke. Spring det også over, hvis dine mål gengiver indholdet i browseren, og du ikke vil koble en separat renderer på, for trafilatura læser statisk HTML og stopper dér. Fejlmønstret er ikke dramatisk; du får bare et tomt eller tyndt resultat og spekulerer på hvorfor. Match værktøjet til opgaven — artikeltekst, ja; struktureret JSON eller JS-renderede sider, kig et andet sted.
Alternativer, inklusive hvor Thunderbit passer ind
Prøv Thunderbit til webdataudtræk
Den fair rammesætning først. trafilatura er et gratis, Apache-2.0, self-hosted bibliotek, du selv kører. Du ejer koden, det koster ingenting pr. side, og det er let nok til at blive lagt ind i enhver pipeline uden driftsmæssig friktion. Til den konkrete opgave at skære en artikel ned til ren tekst er den kombination svær at slå, og en betalt service ændrer ikke på den vurdering.
Sammenligningen bliver først interessant ved den grænse, trafilatura bevidst sætter: strukturerede data og JavaScript. Det er de to ting, den ikke vil gøre, og de er tilfældigvis netop de to ting, en managed extraction API er bygget til at håndtere. Det er dér, Thunderbit's udviklerstack ligger — på den anden side af den linje, hvor den supplerer trafilatura i stedet for at konkurrere med den om statisk HTML-artikeltekst. /distill-endpointet gør den samme type opgave som trafilatura gør, altså side til ren LLM-ready Markdown, men med JavaScript-rendering håndteret server-side, hvilket er præcis den halvdel, trafilatura springer over. Og /extract returnerer struktureret JSON efter et schema, du selv definerer, hvilket er den halvdel, trafilatura bevidst afviser: kataloget, der kom tilbage som 478 tegn flad tekst, er netop tilfældet, hvor du i stedet ville række ud efter /extract. Til AI-agenter og kodeassistenter er der en MCP-server, hvis field-suggestion-værktøj er gratis at prøve, og en CLI via npx @thunderbit/thunderbit-cli til terminal-, CI- og cron-arbejde. Den kører på samme motor som Thunderbit Chrome Extension, som bruges af over 100.000 mennesker, så den ikke-tekniske vej findes også, men for dette publikum er API, MCP og CLI det relevante lag.
Så den reelle afvejning har aldrig handlet om kvaliteten af tekstudtrækket — trafilatura vinder på de sider, den er bygget til, og det siger jeg gerne ligeud. Det handler om scope og om, hvem der kører browseren. Har du brug for ren artikeltekst fra statisk HTML, self-hosted og til nul pris pr. kald? trafilatura er det lettere og skarpere værktøj, punktum. Har du brug for struktureret JSON efter et schema, eller renderes siden først efter at JavaScript er kørt? Så er det den managed stack, der er din bane, og det er ikke en kamp, trafilatura prøver at tage. Priser for den managed side finder du på Thunderbit-prissiden, hvis du vejer pris pr. side op mod selv at drifte en renderer.
Hvis du sammenligner på tværs af hele kategorien, holder jeg en løbende oversigt over de web scraping-værktøjer, jeg faktisk bruger, hvor biblioteker som dette står side om side med browserstyrede og managed alternativer.
Konklusion
Skal du bruge trafilatura? Ja — hvis din opgave er at forvandle rodet HTML til ren artikeltekst, og du er helt klar over de to ting, det bevidst ikke gør. Den rensede en side for hver eneste boilerplate-markør og returnerede titel, alle tre brødtekstafsnit samt forfatter og dato, fra en enkelt let installation uden en browser i syne. Den outputter txt, Markdown og JSON samlet, hvilket gør den til et legitimt LLM-ready text-trin. I et felt, der er overbevist om, at man skal bruge en headless browser og en AI-crawler for overhovedet at gøre noget som helst, var det værktøjet uden browser, der gjorde den oprydning, jeg går op i.
Men dimensionér det rigtigt. Det er en ekstraktor, ikke en struktureret scraper — kataloget kom tilbage som 12 tekstnavne og 0 rækker. Den læser statisk HTML og kører ikke JavaScript. Dens metadataudtræk er stærkt på nogle sider og delvist på andre (forfatter og sitenavn blev null på begge de rigtige artikeltestfiler, jeg tjekkede). Og min offentlige prosa-test lænede sig op ad en produktbeskrivelsesblok, ikke en rigtig nyhedsartikel, så betrag den newsroom-grade påstand som lovende snarere end afgjort. Inden for de rammer gør trafilatura sin ene opgave renere end de tungere værktøjer, jeg sammenlignede den med — og den gør det med næsten intet installeret.
Prøv Thunderbit til webdataudtræk Get Started Free
FAQ
Hvad udtrækker trafilatura egentlig fra en side? Hovedindholdet — artikelteksten plus titlen og metadata som forfatter og dato — med boilerplate fjernet. I min test returnerede den titlen og alle 3 af 3 brødtekstafsnit fra en side omgivet af navigation, login, subscribe og copyright-støj, og ingen af de markører fandt vej til outputtet. Den afgør selv, hvad der tæller som indhold, ved hjælp af heuristikker, så den behøver ingen selectors pr. site for at rydde op på en side, den ikke har set før.
Kan trafilatura scrape et produktkatalog til strukturerede rækker? Nej. Det er en indholds-ekstraktor, ikke en struktureret scraper. På en katalogtestfil med 12 produkter returnerede den alle 12 produktnavne som flad tekst (478 tegn) og 0 strukturerede rækker — navnene er i outputtet, men de er ikke felter. Hvis du har brug for typede records som navn/pris/vurdering, så brug i stedet en selector-baseret parser eller en schema-drevet extraction API.
Renderer trafilatura JavaScript? Nej. Den læser kun statisk HTML. Peg den mod en klient-renderet side, og du får det, serveren sendte, før JavaScript blev kørt, hvilket ofte ikke er det indhold, du er ude efter. Kombinér den med en separat renderer, hvis dine mål er JS-tunge; trafilatura læser det statiske dokument og stopper dér.
Er trafilatura svær at installere?
Nej — det er faktisk et af de klare salgsargumenter. pip install trafilatura trak et enkelt, rent pakke-træ ind i en frisk virtualenv på Python 3.14, uden browser-download, uden efter-installationsstep og uden skjulte ekstra grupper. Versionen pip installerede (2.1.0) er identisk med den aktuelle release, udgivet 2026-06-07.
Hvor præcis er trafilatura sammenlignet med andre ekstraktorer? Jeg benchmarkede ikke nøjagtigheden i denne anmeldelse, så jeg henviser til den eksterne evidens i stedet. trafilatura har en evalueringsside, og den rapporterer den bedste open source-F1 (omkring 0,945) i ScrapingHub article-extraction benchmark sammenlignet med værktøjer som readability-lxml (~0,887). Bemærk, at tallet kommer fra det benchmark på en ældre 0.5.1-linje, ikke den 2.1.0-version, jeg testede — så læs det som ekstern evidens for værktøjets ry, ikke som en måling fra denne artikel.


