De meeste scrapingtools die dit jaar in de schijnwerpers staan, willen een browser aansturen. trafilatura doet dat niet. Het is een pure-Python library die statische HTML leest, bepaalt welke blokken echt tot het artikel behoren en de rest weggooit. Die smalle taak — hoofdcontent extraheren — is precies waar het om draait, en daar is deze library al jaren goed in, nog voordat iemand de term “LLM-ready markdown” gebruikte.
Ik heb versie 2.1.0 door een vaste set fixtures gehaald op Python 3.14, en de artikeltest bleef me het meest bij. Ik verpakte een stuk echte tekst in de gebruikelijke paginarandjes — een loginmelding, een “Subscribe”-opmerking, navigatielinks, een copyright-footer — en trafilatura gaf de titel terug, alle drie alinea’s van de body, de auteur en de datum, terwijl al die boilerplate-markers verdwenen waren. Geen browser, geen per-site regels, één functieaanroep. Er zit wel een addertje onder het gras, en dat zie je zodra je iets gestructureerds vraagt. Daar kom ik zo op terug (het is een ontwerpkeuze, geen fout).
Wat trafilatura is, en welke aanname je los moet laten
De officiële one-liner noemt het een “Python & command-line tool to gather text and metadata on the Web: crawling, scraping, extraction,” met output in CSV, JSON, HTML, Markdown, TXT of XML. Dat klinkt breed, maar daarmee wordt juist het deel onderbelicht dat de tool echt onderscheidt. De waarde zit niet in de crawl-hulpmiddelen of de zes uitvoerformaten. Het zit in contentextractie: HTML-document erin, hoofdtekst van het artikel eruit, paginakader eraf.
Dit is het denkkader, omdat het in één keer de kracht en de grens verklaart. De meeste scrapers die je op een pagina loslaat, werken met selectors. Je zegt: “pak het element met class product-price”, en ze geven terug wat daar staat. trafilatura werkt juist andersom. Het leest het hele document en beslist welke blokken het artikel zijn en welke boilerplate zijn, met heuristieken op basis van content in plaats van een door jou geschreven selector. Daarom heeft het geen per-site configuratie nodig om een pagina op te schonen die het nog nooit eerder heeft gezien. En precies daarom kan het geen gestructureerde catalogus teruggeven: er is geen schema, geen veldmapping, alleen een afweging over wat als content telt. Het is een extractor, geen parser die je richt.
Het is ook echt lichtgewicht. Pure Python, geen headless browser, geen chromium-binary die in je cache blijft hangen, geen Playwright-installatie die je bij de eerste run overvalt. Dat lijkt een detail totdat je extractie op duizenden URL’s draait en elk megabyte aan dependencies en elke subprocess iets is dat je moet beheren. Dit project heeft op 2026-07-09 ongeveer 6,26k sterren (adbar/trafilatura) — een veel kleinere repo dan de browser- en crawlerframeworks waarmee het vaak in één adem wordt genoemd. Dat zegt iets over de scope, niet over de kwaliteit.
Installatie is het korte deel, en dat is hier juist de review
Installeren is één regel en er is niets waarvoor je moet worden gewaarschuwd — en dat is op zichzelf al het vermelden waard. pip install trafilatura in een verse virtualenv haalde op Python 3.14 één nette packageboom binnen: geen browser om te downloaden, geen post-install-stap, geen muur van transitieve dependencies. Ik heb genoeg van dit soort libraries gezien om te wachten op de tweede verrassing: het browserpakket van 150 MB dat je pas bij de eerste uitvoering ontdekt, de native extension die niet compileert, de extra [fetchers]-groep waar niemand het over had. Bij trafilatura kwam die tweede verrassing niet.
De versie die pip mij gaf (2.1.0) komt overeen met de huidige release, gepubliceerd op 2026-06-07, dus niets hieronder draagt een “je hebt iets ouds getest”-sterrenvoetnoot. Dat is in deze categorie lang niet altijd zo — veel zwaardere tools die ik heb bekeken zaten al op een major version achter toen ik ze draaide. Hier zijn de geteste build en de live release gelijk.
Praktisch: wat de extractor daadwerkelijk teruggaf
Ik heb trafilatura losgelaten op fixtures die zowel zijn sterke punt als zijn grens raken. De artikeltest bepaalde uiteindelijk mijn oordeel.

Ik nam een lokale article fixture en stopte de echte inhoud weg in ruis — een loginprompt, een “Subscribe”-call-to-action, navigatielinks en een copyright-footer, precies het soort boilerplate dat een naïeve scraper samen met de body meeneemt. trafilatura gaf de titel terug plus alle 3 van de 3 body-paragrafen, en elk uniek boilerplate-marker — Login, Subscribe, Copyright — ontbrak in de output. Naast de tekst haalde het ook de auteur en de datum correct uit de paginametadata. Het resultaat kwam uit in .txt, .md en .json via één enkele aanroep.

Dat multi-formatdetail verdient even aandacht. Eén extractie leverde platte tekst, Markdown en JSON op. De Markdown-route is precies die “LLM-ready text”-stap waar iedereen nu naar op zoek is: rommelige pagina erin, schone tekst met structuur eruit, en dan doorgeven aan een model. trafilatura doet dat zonder dat er ergens een browser in de keten zit, wat een stillere route is naar dezelfde output waarvoor browsergestuurde tools een volledige renderstack optuigen.
Daarna de publieke check. Ik wees het op een live productpagina — een Books to Scrape productpagina — en het leverde 1.324 tekens aan schone tekst plus Markdown terug: het beschrijvingsblok, goed leesbaar, zonder paginakader eromheen. En toen ik een pagina voerde die met HTTP 500 antwoordde, gaf fetch_url None terug in plaats van een exception te gooien. Geen crash, geen stacktrace om op te vangen. Dat saai-maar-correcte faalgedrag is precies wat je wilt in iets dat onbewaakt op een schema draait.
De kanttekeningen
Drie stuks, en elk daarvan geeft aan waar de tool wel en niet past.

Ten eerste, en dit is de belangrijkste: trafilatura is een contentextractor, geen gestructureerde scraper. Ik heb het getest op een catalogfixture met 12 producten. Het gaf alle 12 productnamen terug — als tekst — en precies 0 gestructureerde rijen (478 tekens platte tekst). De namen en prijzen zitten wel in de output, maar niet als velden. Als je [{name, price, rating}, …] nodig hebt, is dit de verkeerde tool, en geen configuratie-optie verandert dat. Het is een ontwerpkeuze over waar de tool voor bedoeld is, geen bugrapport.

Ten tweede: het rendert geen JavaScript. Het verwerkt statische HTML. Richt je het op een client-rendered single-page app, dan krijg je wat de server stuurde vóórdat de JavaScript draaide — en dat is vaak niets bruikbaars. Combineer het met een renderer als je doelen zwaar op JS leunen; trafilatura doet dat deel niet voor je, en doet ook niet alsof.
Ten derde, een kanttekening bij mijn eigen bewijs. De publieke extractietest hierboven leunde op een productbeschrijvingsblok, niet op een echt nieuwsartikel, omdat de publieke sandbox die ik gebruikte (de toscrape-familie) alleen catalogi bevat en geen nieuwsartikelen. Het schone resultaat van het opschonen van een artikel komt uit een gecontroleerde lokale fixture. Ik vertrouw dat resultaat — het verwijderen van boilerplate is ondubbelzinnig en reproduceerbaar — maar een productpagina bewijst nog geen newsroom-kwaliteit extractie, dus ik ga het ook niet zo labelen.
Om dat gat deels te dichten, heb ik een aparte, bewust niet-beoordeelde demonstratie gedraaid op twee echte artikelpagina’s, met opgeslagen fixtures zodat de run deterministisch is. Op het Wikipedia-artikel “Web scraping” bracht trafilatura de body terug van 230.049 bytes ruwe HTML naar 26.673 bytes geëxtraheerde content (een body-to-raw ratio van 0,116), en alle vier gecontroleerde site-chromemarkers — “Jump to content,” “Privacy policy,” “Powered by MediaWiki,” “This page was last edited” — verdwenen. Op een gearchiveerd Wikinews-artikel ging het van 79.716 bytes naar 2.200 (een ratio van 0,028), en ook daar werden alle vijf gecontroleerde markers verwijderd. Titel, datum en hostname kwamen op beide pagina’s ingevuld terug; auteur en sitenaam kwamen op beide pagina’s als null terug, en die missers rapporteer ik juist expliciet. Twee dingen om niet door elkaar te halen: die bytesratio zegt hoeveel markup en chrome zijn verwijderd, niet hoe accuraat de extractie was, en beide pagina’s komen uit dezelfde MediaWiki-familie, dus dit is een demonstratie op echte artikelen, geen representatieve corpusstudie.
Voor de nauwkeurigheid zelf verwijs ik liever naar extern bewijs dan te doen alsof ik dat hier heb gemeten. trafilatura publiceert zijn eigen evaluatiepagina, en vermeldt in de ScrapingHub article-extraction benchmark de hoogste open-source F1 (ongeveer 0,945) ten opzichte van vergelijkers zoals readability-lxml (~0,887). Twee eerlijke kanttekeningen bij dat cijfer: het komt uit die benchmark, niet uit mijn test, en de genoemde ~0,945 hoort bij een oudere 0.5.1-lijn in de bron, niet bij de 2.1.0 die ik draaide. Zie het dus als extern benchmarkbewijs voor de reputatie van de tool, niet als een meting uit deze review.
Plus- en minpunten
Pluspunten:
- Schoonste artikelextractie in mijn set — titel plus alle 3 van de 3 paragrafen, met elk boilerplate-marker (Login/Subscribe/Copyright) verwijderd.
- Haalt auteur en datum correct uit de metadata naast de body.
- Meerdere uitvoerformaten via één aanroep: txt, Markdown en JSON — waarbij Markdown een echte LLM-ready tekststap is.
- Lichtgewicht, pure-Python installatie — geen browser, geen binary-download, geen dependency-muur.
- Soepel foutgedrag:
fetch_urlgeeftNoneterug bij HTTP 500 in plaats van een exception te gooien. - Geteste versie is gelijk aan de huidige release (2.1.0) — geen versie-afwijking.
- Apache-2.0-licentie — permissief en commercieel vriendelijk.
Minpunten:
- Geen gestructureerde scraper: de catalogtest gaf 12 namen als tekst en 0 getypeerde rijen terug. Geen schema, geen velden.
- Geen JavaScript-rendering — alleen statische HTML; voor client-side pagina’s is een aparte renderer nodig.
- Metadata is op sommige sites deels incompleet: auteur en sitenaam kwamen op beide echte artikel-fixtures als null terug.
- Mijn publieke teksttest gebruikte een productbeschrijvingsblok, geen echt nieuwsartikel.
- De ingebouwde crawl-/sitemap-spider en de CSV/XML-uitvoerformaten zijn in deze testpass niet meegenomen, dus daar doe ik geen uitspraken over.
Voor wie het is — en wie beter kan doorlopen
trafilatura is duidelijk bedoeld voor de persoon met dit probleem: “Ik heb URL’s en ik wil schone artikeltekst, zonder navigatiebalk, cookiebanner en nieuwsbrief-nudging.” Een tekencorpus opbouwen, pagina’s aan een model voeren, leesbare content archiveren, NLP toepassen op webartikelen — dat is het speelveld, en daar is de tool heel goed in. Als je een lichte, browserloze stap wilt die rommelige HTML omzet in schone Markdown of JSON, installeer het dan en ga verder met je dag.
Sla het over als je eigenlijk gestructureerde extractie nodig hebt: productregels met prijzen, getypeerde records, key: value-velden. Het geeft je tekst, geen tabellen — de catalogtest haalde de namen op maar niet de rijen, en dat verandert niet. Sla het ook over als je doelen content pas renderen in de browser en je geen aparte renderer wilt koppelen, want trafilatura leest statische HTML en stopt daar. De foutmodus is niet spectaculair; je krijgt gewoon een leeg of mager resultaat en vraagt je af waarom. Laat de tool aansluiten op de klus — artikeltekst, ja; gestructureerde JSON of JS-gerenderde pagina’s, kijk elders.
Alternatieven, inclusief waar Thunderbit past
Probeer Thunderbit voor webdata-extractie
Eerst even de eerlijke vergelijking. trafilatura is een gratis, Apache-2.0, zelf te hosten library die je zelf draait. Je bezit de code, betaalt niets per pagina en kunt het licht genoeg in vrijwel elke pipeline opnemen zonder operationele ballast. Voor de specifieke taak om een artikel terug te brengen tot schone tekst is dat moeilijk te overtreffen, en een betaalde dienst verandert daar niets aan.
De vergelijking wordt pas interessant aan de grens die trafilatura bewust trekt: gestructureerde data en JavaScript. Dat zijn precies de twee dingen die het niet doet, en toevallig ook de twee dingen waar een beheerde extractie-API voor is gebouwd. Daar zit de developer stack van Thunderbit — aan de andere kant van die grens, als aanvulling op trafilatura in plaats van als concurrent voor statische-HTML artikeltekst. De /distill-endpoint doet in wezen hetzelfde soort werk als trafilatura: een pagina terugbrengen tot schone, LLM-ready Markdown, maar dan met JavaScript-rendering server-side afgehandeld — precies het deel dat trafilatura overslaat. En /extract levert gestructureerde JSON op basis van een schema dat je zelf definieert, dus juist het deel dat trafilatura uit principe niet doet: de catalogus die terugkwam als 478 tekens platte tekst is precies zo’n geval waarvoor je eerder /extract zou pakken. Voor AI-agents en coding assistants is er een MCP-server, met een gratis veldsuggestietool om uit te proberen, en via npx @thunderbit/thunderbit-cli is er een CLI voor terminal-, CI- en cronwerk. Het draait op dezelfde engine als de Thunderbit Chrome Extension, die door meer dan 100.000 mensen wordt gebruikt, dus ook een niet-technische route bestaat. Maar voor dit publiek zijn vooral de API, MCP en CLI relevant.
De echte afweging was dus nooit de kwaliteit van tekstextractie — trafilatura wint daar op de pagina’s waarvoor het gemaakt is, en dat zeg ik zonder omhaal. Het gaat om scope en om wie de browser draait. Heb je schone artikeltekst nodig uit statische HTML, self-hosted en zonder kosten per call? Dan is trafilatura de lichtere, scherpere tool. Heb je gestructureerde JSON nodig op basis van een schema, of wordt de pagina pas bruikbaar na JavaScript-rendering? Dan zit je in het domein van een beheerde stack, en dat is geen gevecht dat trafilatura probeert te voeren. Prijzen voor de beheerde kant vind je op de Thunderbit-prijspagina als je de kosten per pagina wilt afwegen tegen zelf een renderer beheren.
Als je opties over de hele categorie afweegt, houd ik een doorlopende vergelijking bij van de webscrapingtools die ik echt gebruik, waarin bibliotheken zoals deze naast browsergestuurde en beheerde alternatieven staan.
Conclusie
Moet je trafilatura gebruiken? Ja — als jouw taak is om rommelige HTML om te zetten in schone artikeltekst, en je helder hebt welke twee dingen het bewust niet doet. Het verwijderde van een pagina elk spoor van boilerplate en gaf in één lichte installatie, zonder browser, de titel, alle drie body-paragrafen, de auteur en de datum terug. Het levert txt, Markdown en JSON samen, wat het tot een legitieme LLM-ready tekststap maakt. In een vakgebied dat ervan uitgaat dat je altijd een headless browser en een AI-crawler nodig hebt om überhaupt iets te doen, was juist de tool die geen browser opent degene die de opschoning deed waar ik om geef.
Zet het alleen in de juiste context. Het is een extractor, geen gestructureerde scraper — de catalogus kwam terug als 12 namen tekst en 0 rijen. Het leest statische HTML en voert geen JavaScript uit. De metadata-extractie is op sommige pagina’s sterk en op andere deels incompleet (auteur en sitenaam kwamen op beide echte article fixtures die ik testte als null terug). En mijn publieke teksttest leunde op een productbeschrijvingsblok, niet op een echt nieuwsartikel, dus beschouw de claim over newsroom-kwaliteit als veelbelovend, niet als definitief bewezen. Binnen die grenzen doet trafilatura zijn ene taak schoner dan de zwaardere tools waarmee ik het vergeleek — en dat met bijna niets geïnstalleerd.
Probeer Thunderbit voor webdata-extractie Get Started Free
Veelgestelde vragen
Wat extraheert trafilatura eigenlijk van een pagina? De hoofdcontent — de artikelbody plus de titel, en metadata zoals auteur en datum — terwijl boilerplate wordt verwijderd. In mijn test gaf het de titel en alle 3 van de 3 body-paragrafen terug van een pagina met navigatie, login, subscribe en copyright-ruis, en al die markers ontbraken in de output. Het bepaalt met heuristieken wat content is, dus je hebt geen per-site selectors nodig om een nieuwe pagina op te schonen.
Kan trafilatura een productcatalogus in gestructureerde rijen scrapen? Nee. Het is een contentextractor, geen gestructureerde scraper. Op een catalogfixture met 12 producten gaf het alle 12 productnamen terug als platte tekst (478 tekens) en 0 gestructureerde rijen — de namen staan wel in de output, maar niet als velden. Als je getypeerde records nodig hebt zoals naam/prijs/beoordeling, gebruik dan een parser op basis van selectors of een schema-gedreven extractie-API.
Rendert trafilatura JavaScript? Nee. Het verwerkt alleen statische HTML. Richt je het op een client-rendered pagina, dan krijg je wat de server stuurde vóórdat JavaScript draaide — en dat is vaak niet de content die je zoekt. Combineer het met een aparte renderer als je doelen zwaar op JS leunen; trafilatura leest het statische document en stopt daar.
Is trafilatura moeilijk te installeren?
Nee — dat is juist een van de sterkste punten. pip install trafilatura haalde in een verse virtualenv op Python 3.14 één schone packageboom binnen, zonder browserdownload, zonder post-install-stap en zonder verborgen extras-groep. De versie die pip installeerde (2.1.0) komt overeen met de huidige release, gepubliceerd op 2026-06-07.
Hoe nauwkeurig is trafilatura vergeleken met andere extractors? Ik heb in deze review geen nauwkeurigheidsbenchmark gedaan, dus ik verwijs naar extern bewijs. trafilatura publiceert een eigen evaluatiepagina, en vermeldt in de ScrapingHub article-extraction benchmark de hoogste open-source F1 (ongeveer 0,945) ten opzichte van vergelijkers zoals readability-lxml (~0,887). Let op: dat cijfer komt uit die benchmark op een oudere 0.5.1-lijn, niet uit de 2.1.0 die ik testte — lees het dus als extern bewijs voor de reputatie van de tool, niet als meting uit dit artikel.


