newspaper4k leverde output op 22 van de 22 gecontroleerde artikel-fixtures

Laatst bijgewerkt op August 17, 2026
newspaper4k leverde output op 22 van de 22 gecontroleerde artikel-fixtures
AI-samenvatting
Across one annotated, article-oriented fixture set, newspaper4k produced output on all 22 fixtures, recovered 98.65% of scored article units, and included none of the labeled boilerplate tokens. Those three dimensions make it a strong candidate under this test's priorities; they do not define a universal winner. Nothing else in this set combined those three observed results. Mozilla Readability recovered every scored content unit but included more labeled boilerplate; goose3 included no labeled boilerplate but returned empty strings twice. Other decision rules can prefer another library.

Over één geannoteerde fixture-set met focus op artikelen leverde newspaper4k output op alle 22 fixtures, herstelde het 98,65% van de gescoorde artikelonderdelen en bevatte het geen van de gelabelde boilerplate-tokens. Die drie uitkomsten maken het binnen de prioriteiten van deze test een sterke kandidaat; ze maken nog geen universele winnaar.

Binnen deze set combineerde geen enkele andere tool precies deze drie waargenomen resultaten. Mozilla Readability herstelde wel elk gescoord contentonderdeel, maar nam meer gelabelde boilerplate mee; goose3 had geen gelabelde boilerplate, maar gaf twee keer een lege string terug. Andere beoordelingscriteria kunnen dus prima naar een andere library wijzen.

Eén fetch-standaard verdient vóór uitrol expliciete aandacht.

Wat newspaper4k is

newspaper4k is een onderhouden fork van newspaper3k, dat zelf weer de Python 3-opvolger was van het oorspronkelijke newspaper. Die afstamming is belangrijk wanneer je documentatie of hulp zoekt, want veel online materiaal verwijst nog naar de voorganger en een deel van de API is intussen verhuisd.

Officiële bron: de officiële repository van newspaper4k.

System diagram: Article Extraction Pipeline

De meest voorkomende manier om deze library verkeerd te gebruiken is bijvoorbeeld set_html() aanroepen. Die methode bestaat niet. HTML geef je door via download():

from newspaper import Article
a = Article(url="https://example.com/story")
a.download(input_html=html)     # niet set_html()
a.parse()
text = a.text

Ik had dat in mijn eerste run zelf ook fout en zette de library eerst op 0 van 22 fixtures, voordat ik checkte of de fout misschien bij mij lag. Dat was inderdaad zo.

Wat je terugkrijgt is bovendien meer dan alleen tekst. Het Article-object biedt velden zoals text, title, authors, publish_date, top_image, images, movies, meta_description, meta_lang, tags en article_html. Voor keywords en summary is de optionele NLP-installatie en corpus-setup nodig, zoals hieronder beschreven. De beschikbare velden zijn geïnventariseerd, maar de nauwkeurigheid van metadata is niet beoordeeld.

Geteste versie: 0.9.6, MIT-licentie, 1.135 GitHub-stars, met een repository-push gedateerd op 2026-07-31. Die datum is een momentopname, geen volledige beoordeling van onderhoudsgezondheid. Python 3.14.2.

Het resultaat

LibraryRecall van artikelen (alle 22)Boilerplate-lekPrecisie op content-tokensVerontreinigende tokensOutput geleverd
Readability1.00000.23530.91093522/22
trafilatura0.98650.05880.9411422/22
newspaper4k0.98650.00000.9452022/22
resiliparse0.90540.05880.9381722/22
jusText0.83780.47060.87607419/22
goose30.82430.00001.0000020/22

sixway-scores.json. In elke fixture heeft elk onderdeel een unieke sentinel-token, dus "hersteld" en "gelekt" zijn exacte substring-controles en geen similarity score. Recall geldt over alle 22 fixtures; leak en precisie over de 11 fixtures die zowel artikel- als boilerplate-inhoud bevatten.

Drie kolommen verdienen aparte aandacht.

Het gaf op elke pagina output. Dat deden goose3 en jusText niet — respectievelijk 20 en 19 van 22. Dat is belangrijker dan het op het eerste gezicht lijkt, omdat precisie en F1 in zo’n tabel afhankelijk zijn van het feit dat er output is: een library die een lege string teruggeeft, telt in geen van beide kanten mee en kan daardoor relatief ‘gratis’ falen. goose3’s precisie van 1.0000 is gescoord op 10 van de 11 fixtures; newspaper4k’s 0.9452 op 11 van 11. Dat is dus niet helemaal dezelfde meting.

Er lekte niets door. De fixtures bevatten bewust vijandige boilerplate — neutraal geclassificeerde promo-blokken als siblings van het artikel, commentthreads met onschuldige class-namen, advertentieblokken die niet letterlijk "ad" zeggen. Readability’s sibling-append-heuristiek slokte er meerdere op; newspaper4k nam er geen van mee.

Het miste 1 onderdeel van de 74, en dat ene ontbrekende onderdeel komt gedeeld terug.

De miss zit op de niet-proza-fixture — een pagina opgebouwd uit tabellen, een codeblok, korte items en een beeldonderschrift in plaats van paragrafen — en het onderdeel dat wegviel is de caption. Daar is newspaper4k niet alleen in:

LibraryRecall op de niet-proza-paginaGemiste onderdelen
Readability1.000
jusText1.000
trafilatura0.875de caption
resiliparse0.875de caption
newspaper4k0.875de caption
goose30.250beide tabellen, het codeblok, beide korte items, de caption

Drie libraries laten dezelfde caption vallen en niets anders. Dat voelt minder als drie losse bugs en meer als één gedeelde aanname over wat een caption waard is. Als je content bestaat uit documentatie, recepten of iets anders waarbij de caption informatie draagt die niet in de alinea staat, test dat dan vóór je beslist — Readability en jusText lieten die caption in elk geval wel staan.

Diezelfde fixture is ook waar goose3 volledig instort: het verliest driekwart van de pagina. Dat laat zien dat "niet-proza-content" een as is waarop deze zes libraries veel sterker van elkaar verschillen dan de headline-tabel doet vermoeden.

Qua snelheid lag newspaper4k’s median extractietijd over de 22 fixtures op 2,69 ms, en dat was de langzaamste van de zes, met een slechtste geval van 199,81 ms. Tegenover resiliparse’s median van 0,06 ms is dat in deze gecontroleerde run een verschil van 45×. Die median is misschien klein in een workflow met één pagina, maar throughput en tail latency onder belasting zijn niet getest. Cold import meten we verderop apart.

De standaard die ik op regel 1 zou veranderen

System diagram: The default I would change on line one

Officiële bron: de documentatie van newspaper4k.

Als je het meegeleverde Configuration-object bekijkt, vind je 22 instellingen. Een daarvan is deze:

System diagram: Separate Fetching From Extraction

_honor_robotstxt = False

newspaper4k houdt standaard geen rekening met robots.txt, tenzij je dat expliciet aanzet. Laat je de library zelf ophalen — Article(url).download() zonder input_html — dan haalt hij op wat je hem geeft, ongeacht wat het robots-bestand van de site zegt.

Dat is een verdedigbare technische standaard voor een library die vooral bedoeld is om HTML te parsen die je al hebt, maar een ronduit slechte verrassing in productie nadat je hem op duizend URL’s hebt losgelaten. Zet honor_robotstxt=True in je Configuration, of geef input_html door en regel het fetchen zelf; dat laatste deed ik in deze test overal.

Nog twee defaults die je moet kennen:

number_threads = 10. De standaardparalleliteit voor multi-article helpers is tien. Concurrency is niet hetzelfde als requests per seconde, maar kan wel een piek van gelijktijdige requests veroorzaken als je geen expliciete limieten per host en planning instelt.

fetch_images = True. Afbeeldingen ophalen staat standaard aan, wat vragen oproept voor offline gebruik. Met socket.connect geblokkeerd werd de geteste newspaper4k 0.9.6-route — download(input_html=…) gevolgd door parse() op één vastgehouden HTML-input — volledig afgerond, leverde 1.292 tekens op en deed nul netwerkconnectiepogingen. Dat ondersteunt alleen precies die route, niet elke configuratie, plugin, content-type of toekomstige release.

De rest is redelijk: min_word_count 300, min_sent_count 7, max_text 100.000, http_success_only True, memorize_articles True, follow_meta_refresh False, allow_binary_content False.

Praktijk rond installatie

pip install newspaper4k haalt 22 pakketten en 47,5 MiB op in ongeveer zes seconden. Cold import in een verse subprocess: 2,812 s — de langzaamste van de vergelijking.

LibraryPakkettensite-packagesCold importExtractie p50
resiliparse521.0 MiB0.015 s0.06 ms
jusText322.4 MiB0.777 s0.56 ms
goose31644.3 MiB2.181 s1.85 ms
newspaper4k2247.5 MiB2.812 s2.69 ms
trafilatura1769.9 MiB1.584 s0.51 ms

install-and-import.json. Elke library draaide in een eigen lege virtualenv, zodat niets afhankelijkheden van een buur meekreeg.

2,812 seconden importtijd is 187 keer zo lang als resiliparse’s 15 milliseconden. In een langdurig draaiende worker betaal je dat één keer en is het nauwelijks relevant. In een serverless functie betaal je het bij elke cold start, en dan is newspaper4k ondanks de kwaliteit van de extractie simpelweg de verkeerde keuze.

Eén ruwe rand bij installatie. Bij import verschijnt een waarschuwing:

UserWarning: nltk is not installed. Some NLP features will be unavailable. Install it with: pip install 'newspaper4k[nlp]'

Voor deze test was die functionaliteit niet nodig en extractie werkte zonder problemen, maar de basisinstallatie is niet de volledige installatie. newspaper4k[nlp] trekt bovendien een flink zwaardere dependency-tree en corpus-downloads mee. Houd daar alleen rekening mee als je keywords en samenvattingen wilt.

Geheugen, en wat kapotte HTML daarmee doet

Twee zaken die elke review in deze reeks als niet getest had gelabeld, zijn nu gemeten.

De bredere stresstest-context staat in de vergelijking van geheugen en malformed HTML voor tien libraries.

Piek resident memory, via /usr/bin/time -l, telkens één vers proces per cel — de import-floor is wat de library kost als hij geladen en inactief is; de pieken bevatten het document zelf.

LibraryRuntimeImport-floor (MiB)226 KB HTML-piek (MiB)10 MB HTML-piek (MiB)
html2textpython3.1418.719.971.2
pyquerypython3.1430.333.9172.5
resiliparsepython3.1420.525.1225.1
markdownifypython3.1423.928.9278.5
goose3python3.1444.152.4398.5
cheerionode2266.876.5398.5
justextpython3.1430.336.6431.2
newspaper4kpython3.1452.661.8668.5
trafilaturapython3.1452.564.8927.1
turndownnode2247.868.42947.1

memory-results.json. Python- en Node-baselines zijn onderling niet direct vergelijkbaar; de interpreter zit in beide mee inbegrepen.

newspaper4k’s floor is 52,6 MiB en de piek bij 10 MB HTML is 668,5 MiB — de op één na zwaarste onder de Python-bibliotheken. Voor gewone pagina’s is dat geen probleem; bij het batchen van grote documenten in een worker met geheugenlimiet maakt het wel degelijk uit.

Broken HTML. Twaalf documenten die elk precies één ding kapotmaken — niet-afgesloten tags, verkeerd geneste inline-elementen, ongeciteerde attributen met spaties, losse afsluitende tags, helemaal geen <html>, dubbele attributen, een document dat halverwege een tag afbreekt, foute entities, een niet-afgesloten <script>, een verkeerde charset-declaratie, een comment met markup en 600 niveaus nesting — plus twee correct opgebouwde controles op gelijke grootte, want "hij gaf niets terug" zegt alleen iets over malformedness als de library op een schoon document van dezelfde grootte óók stil is.

De controles en malformed-cases scheiden zich duidelijk in de ruwe resultaten:

GroepDocumentenExceptionLege outputHerstelde gescoorde sentinels
Correct opgebouwde controls met gelijke grootte200niet gebruikt in de malformed-score
Malformed fixtures120105/33, exclusief het niet-afgesloten-<script>-geval

De twee controles leverden 70 en 1.351 tekens op, terwijl tien van de twaalf malformed inputs een lege string gaven. Daardoor kunnen we het stilvallen in deze opzet toeschrijven aan malformedness en niet simpelweg aan korte input. De scorer controleert heading-, paragraph- en link-sentinels over de elf daarvoor in aanmerking komende malformed documenten. De fixture met het niet-afgesloten-<script> is uitgesloten, omdat volgens HTML5-parsing de daaropvolgende markup nog steeds scriptcontent is. Zie malformed-results.json. Dit is een belangrijke beperking in recovery die je mee moet nemen in je keuze, niet slechts een “geen exception” succes.

Plus- en minpunten

In het voordeel. Geen gelabelde boilerplate-tokens in deze vergelijking, output op alle 22 gecontroleerde artikel-fixtures en 0,9865 gescoorde article recall. Het geeft artikeltekst plus metadata-velden terug, al is metadata-nauwkeurigheid niet getest. De geteste held-HTML-route deed geen netwerkpogingen terwijl socket.connect geblokkeerd was. De repository had bij controle een recente gedateerde push; de bredere onderhoudsgezondheid is niet beoordeeld.

Tegen. De zwaarste cold import in deze set met 2,812 s en 22 pakketten / 47,5 MiB gemeten site-packages. honor_robotstxt staat standaard op False en multi-article helpers gebruiken standaard tien threads. De basisinstallatie waarschuwt over ontbrekende NLTK, dus keywords en samenvattingen vereisen een zwaardere optionele installatie. Het belangrijkste: tien van de twaalf malformed fixtures gaven lege output, terwijl beide correct opgebouwde controls wel tekst produceerden.

Voor wie wel, en voor wie niet

Overweeg newspaper4k als je prioriteiten in deze volgorde liggen: niet-lege tekst produceren op de gecontroleerde corpus met artikel-focus, zo min mogelijk gelabelde boilerplate meenemen in die corpus, en een tragere cold import accepteren. Volgens die expliciete regel kwam deze fixturevergelijking uit op newspaper4k. Een andere regel kan juist Readability kiezen voor maximale behoud van gescoorde content, of resiliparse voor opstart- en mediane extractiesnelheid.

Sla over of test grondig vóór adoptie als cold start dominant is, als 47,5 MiB gemeten site-packages een probleem vormen, of als recovery bij malformed HTML belangrijk is. Resiliparse importeerde hier 187× sneller, maar het was niet per se beter dan trafilatura op alle kwaliteitskolommen: trafilatura had hogere article recall, terwijl hun lek- en precisieprofielen ook verschilden. newspaper4k is sterk artikel-georiënteerd; productlijsten en dashboards zijn niet getest, dus daarover doen we geen claim.

Wat je ook doet, zet honor_robotstxt aan als je de library laat fetchen. Dat is geen performance-opmerking.

Waar een managed API past

newspaper4k kan HTML parsén die de caller aanlevert en heeft ook fetch-routes. Een managed extraction-service plaatst acquisitie, rendering en schemawerk daarentegen achter een vendorgrens. Wij bouwen Thunderbit, maar die is niet op deze fixture-set getest, dus deze review ondersteunt geen vergelijking op kwaliteit, rendering, anti-bot, latency of kosten. Voor opgeslagen artikel-HTML gaat het bewijs hier alleen over newspaper4k; niet-artikeldoelen verdienen een eigen evaluatie.

Voor dezelfde fixtures over alle zes extractors kun je kijken naar de vergelijking van zes libraries voor extractie.

Voor de gehoste kant geeft onze round-up van web scraping API’s het bredere beeld; voor zelf-gehoste alternatieven is er de open-source scraper pillar. Als de tekst daarna in een model belandt, laat HTML naar Markdown converteren in Python zien waar fidelity verloren gaat.

Probeer Thunderbit voor webdata-extractie

Moet je newspaper4k gebruiken?

Zie newspaper4k als een sterke kandidaat voor extractie van artikeltekst wanneer HTML al beschikbaar is, en doe daarna eerst een echte praktijkvergelijking op je eigen corpus voordat je het adopteert. De gecontroleerde set ondersteunt hoge gescoorde article recall, geen gelabelde boilerplate en niet-lege output op alle 22 artikelgerichte fixtures. Ze zegt niets over echte pagina’s of metadata-nauwkeurigheid, en tien van de twaalf malformed fixtures gaven lege output terug.

Als je de fetch-route gebruikt, review dan expliciet honor_robotstxt=False, de paralleliteit van tien threads en je per-host rate limits. Als cold start of dependency-footprint ertoe doet, meet dan de lokale importtijd van 2,812 seconden en de 47,5 MiB site-packages in je eigen deployment in plaats van die als universele containerkosten te behandelen.

Probeer Thunderbit voor webdata-extractie Get Started Free

FAQ's

Waarom werkt set_html() niet? Omdat die methode niet bestaat in newspaper4k. HTML geef je door via download(input_html=html), gevolgd door parse(). Zoekresultaten kunnen voorbeelden van newspaper3k tonen, waardoor dit snel misgaat; ik deed dat in de eerste run ook en heb de test-harness vóór het scoren gecorrigeerd.

Respecteert newspaper4k robots.txt? Niet standaard. honor_robotstxt staat op False. Zet het op True in je Configuration als je de library laat fetchen, of geef input_html door en fetch zelf. Multi-article werk gebruikt ook standaard tien threads. Dat is ongekozen paralleliteit, geen vaste requestsnelheid; stel expliciete limieten per host in voor het fetchen.

Doet parse() netwerkverzoeken? Op newspaper4k 0.9.6 deed de geteste route download(input_html=…) plus parse() nul connection-attempts voor één vastgehouden HTML-input terwijl socket.connect geblokkeerd was. Dat bewijst niet dat elke parserconfiguratie, plugin, content-type of toekomstige release netwerkvrij is.

Wat betekent de NLTK-waarschuwing bij import? De basisinstallatie bevat geen NLTK, dus keyword-extractie en samenvatten zijn niet beschikbaar en de library meldt dat bij import. De extractie zelf wordt daardoor niet beïnvloed — alles wat hier gemeten is draaide op de basisinstallatie. pip install 'newspaper4k[nlp]' voegt die functies toe, samen met een zwaardere dependency-tree en corpus-downloads.

Wat is in deze review niet getest? Echte webpagina’s — dit zijn gecontroleerde fixtures met gelabelde onderdelen. Metadata-velden zijn geïnventariseerd, maar niet gescoord op titel-, auteur-, datum- of afbeeldingsnauwkeurigheid. Meertalige extractie, NLP-extra’s, multi-threaded source crawling en throughput onder belasting zijn ook niet getest. De piekgeheugenmeting is gedaan op één HTML-input van 226 KB en één van 10 MB, niet onder concurrency of langdurige belasting.

Ke
Ke
CTO bij Thunderbit | Senior Data Scientist & ML-expert Met bijna tien jaar ervaring in machine learning en data science is Ke Shen alumnus van Columbia University en voormalig Senior Data Scientist bij Walmart Labs. Met diepgaande, door vakgenoten erkende expertise in Python, R, Java en statistiek deelt hij praktijkgerichte inzichten over hoe je complexe AI-algoritmen van theorie naar productieklare architectuur brengt.
Inhoudsopgave
Thunderbit · AI-webdata-agent

Gegevens extraheren van elke pagina in 1 klik

Vertrouwd door meer dan 250.000 gebruikers
gratis abonnement beschikbaar
Van webpagina naar spreadsheet
Beschrijf wat je nodig hebt — Thunderbit's AI Agent scrapt het en exporteert het naar Excel, Google Sheets, Airtable of Notion. Gratis om te starten.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week