Über einen annotierten, auf Artikel ausgerichteten Fixture-Satz hinweg lieferte newspaper4k bei allen 22 Fixtures ein Ergebnis, erfasste 98,65 % der bewerteten Artikelsegmente und enthielt keinen der markierten Boilerplate-Tokens. Diese drei Dimensionen machen das Tool unter den Prioritäten dieses Tests zu einem starken Kandidaten; sie definieren jedoch keinen universellen Sieger.
Kein anderes Tool in diesem Satz vereinte genau diese drei beobachteten Ergebnisse. Mozilla Readability erfasste alle bewerteten Inhaltssegmente, nahm aber mehr markierte Boilerplate auf; goose3 enthielt keine markierte Boilerplate, gab jedoch zweimal leere Strings zurück. Andere Entscheidungskriterien können daher eine andere Bibliothek bevorzugen.
Eine zentrale Fetch-Standardvorgabe sollte vor dem Einsatz ausdrücklich beachtet werden.
Was newspaper4k ist
newspaper4k ist ein gepflegter Fork von newspaper3k, das wiederum die Python-3-Fortführung des ursprünglichen newspaper war. Diese Herkunft ist wichtig, wenn Sie nach Hilfe suchen, denn vieles, was Sie online finden, bezieht sich auf den Vorgänger und einige APIs haben sich verändert.
Offizielle Referenz: offizielles Repository von newspaper4k.

Ein typischer Fehler bei dieser Bibliothek ist, zu set_html() zu greifen. Diese Methode existiert nicht. HTML wird über download() eingespielt:
from newspaper import Article
a = Article(url="https://example.com/story")
a.download(input_html=html) # nicht set_html()
a.parse()
text = a.text
Ich habe das beim ersten Durchlauf selbst falsch gemacht und die Bibliothek mit 0 von 22 Fixtures bewertet, bevor ich prüfte, ob der Fehler bei mir lag. Tat er.
Die Rückgabe besteht nicht nur aus Text. Das Article-Objekt stellt Felder wie text, title, authors, publish_date, top_image, images, movies, meta_description, meta_lang, tags und article_html bereit. keywords und summary erfordern die optionale NLP-Installation und das unten beschriebene Corpus-Setup. Die verfügbare Feldoberfläche wurde inventarisiert, die Metadaten-Genauigkeit aber nicht bewertet.
Getestete Version: 0.9.6, MIT, 1.135 GitHub-Stars, mit einem Repository-Push vom 2026-07-31. Diese datierte Aktivität ist nur eine Momentaufnahme und keine vollständige Aussage über den Wartungszustand. Python 3.14.2.
Das Ergebnis
| Bibliothek | Artikel-Recall (alle 22) | Boilerplate-Leak | Präzision der Content-Tokens | Störende Tokens | Ergebnis geliefert |
|---|---|---|---|---|---|
| Readability | 1,0000 | 0,2353 | 0,9109 | 35 | 22/22 |
| trafilatura | 0,9865 | 0,0588 | 0,9411 | 4 | 22/22 |
| newspaper4k | 0,9865 | 0,0000 | 0,9452 | 0 | 22/22 |
| resiliparse | 0,9054 | 0,0588 | 0,9381 | 7 | 22/22 |
| jusText | 0,8378 | 0,4706 | 0,8760 | 74 | 19/22 |
| goose3 | 0,8243 | 0,0000 | 1,0000 | 0 | 20/22 |
sixway-scores.json. Jede Einheit in jedem Fixture enthält einen eindeutigen Sentinel-Token, daher sind „wiederhergestellt“ und „geleakt“ exakte Teilstring-Prüfungen und keine Ähnlichkeitswerte. Recall bezieht sich auf alle 22 Fixtures; Leak und Präzision auf die 11 Fixtures, die sowohl Artikel als auch Boilerplate enthalten.
Drei Spalten verdienen eine getrennte Betrachtung.
Es hat jede Seite beantwortet. goose3 und jusText taten das nicht – 20 bzw. 19 von 22. Das ist wichtiger, als es zunächst klingt, denn Präzision und F1 in einer solchen Tabelle sind bedingt auf die Ausgabe: Eine Bibliothek, die einen leeren String zurückgibt, trägt zu keiner Seite des Verhältnisses bei; das Nichtliefern ist also kostenlos. Die 1,0000-Präzision von goose3 wurde auf 10 von 11 Fixtures gemessen; newspaper4ks 0,9452 auf 11 von 11. Das ist also nicht ganz dieselbe Messung.
Es hat nichts geleakt. Die Fixtures enthalten absichtlich adversariale Boilerplate – neutral klassifizierte Promo-Blöcke als Geschwister des Artikels, Kommentar-Threads auf harmlos benannten Klassen und Anzeigenblöcke, die nicht „ad“ sagen. Readabilitys Heuristik zum Anhängen von Geschwistern hat mehrere davon aufgenommen; newspaper4k nahm keinen davon mit.
Es hat nur eine Einheit von 74 verfehlt, und die verfehlte ist mit anderen geteilt.
Der Aussetzer betrifft das Nicht-Prosa-Fixture – eine Seite aus Tabellen, einem Codeblock, kurzen Elementen und einer Bildunterschrift statt Absätzen – und die ausgelassene Einheit ist die Bildunterschrift. Damit ist es nicht allein:
| Bibliothek | Recall auf der Nicht-Prosa-Seite | Verlorene Einheiten |
|---|---|---|
| Readability | 1,000 | — |
| jusText | 1,000 | — |
| trafilatura | 0,875 | die Bildunterschrift |
| resiliparse | 0,875 | die Bildunterschrift |
| newspaper4k | 0,875 | die Bildunterschrift |
| goose3 | 0,250 | beide Tabellen, der Codeblock, beide kurzen Elemente, die Bildunterschrift |
Drei Bibliotheken lassen dieselbe Bildunterschrift und sonst keine weitere Einheit fallen. Das wirkt weniger wie drei separate Bugs und eher wie eine geteilte, vererbte Annahme darüber, welchen Wert eine Bildunterschrift hat. Wenn Ihre Inhalte Dokumentation, Rezepte oder etwas anderes sind, bei dem die Bildunterschrift Informationen trägt, die im Absatz fehlen, sollten Sie das vor der Entscheidung testen – Readability und jusText haben sie beide behalten.
Dasselbe Fixture ist auch der Punkt, an dem goose3 völlig auseinanderfällt und drei Viertel der Seite verliert. „Nicht-Prosa-Inhalt“ ist also eine Achse, auf der sich diese sechs Tools deutlich stärker unterscheiden, als die Zusammenfassungstabelle vermuten lässt.
Bei der Geschwindigkeit lag newspaper4k mit einer medianen Extraktionszeit von 2,69 ms über die 22 Fixtures hinweg am langsamsten von allen sechs, mit einem Worst-Case von 199,81 ms. Gegenüber resiliparses Median von 0,06 ms ist das in diesem kontrollierten Lauf ein Faktor von 45. Der Median mag in einem Single-Page-Workflow klein wirken, aber Durchsatz und Latenzspitzen unter Last wurden nicht getestet. Der Kaltimport wird weiter unten separat betrachtet.
Die Standardvorgabe, die ich in Zeile eins ändern würde

Offizielle Referenz: Dokumentation von newspaper4k.
Ein Blick auf das ausgelieferte Configuration-Objekt zeigt 22 Einstellungen. Eine davon ist:

_honor_robotstxt = False
newspaper4k beachtet robots.txt nicht, solange Sie es nicht ausdrücklich anweisen. Wenn Sie das Tool selbst fetchen lassen – Article(url).download() ohne input_html –, lädt es alles, worauf Sie es zeigen, unabhängig davon, was die robots-Datei der Website sagt.
Das ist als technische Voreinstellung für eine Bibliothek, deren Hauptzweck das Parsen bereits vorhandenen HTMLs ist, vertretbar. In der Produktion nach dem ersten Einsatz auf tausend URLs ist das jedoch eine schlechte Überraschung. Setzen Sie honor_robotstxt=True in Ihrer Configuration, oder übergeben Sie input_html und holen Sie die Inhalte selbst – genau so habe ich diesen Test durchgeführt.
Zwei weitere Punkte sind wichtig:
number_threads = 10. Die Standard-Parallelität für die Multi-Article-Helfer liegt bei zehn. Parallelität ist nicht dasselbe wie Requests pro Sekunde, kann aber mehrere gleichzeitige Anfragen auslösen, wenn Sie keine expliziten Limits pro Host und kein Scheduling festlegen.
fetch_images = True. Das Abrufen von Bildern ist standardmäßig aktiviert, was für den Offline-Einsatz relevant ist. Mit blockiertem socket.connect lief der getestete newspaper4k-0.9.6-Pfad – download(input_html=…) gefolgt von parse() auf einem gehaltenen HTML-Eingang – durch, lieferte 1.292 Zeichen zurück und versuchte keine Netzwerkverbindungen. Das belegt genau diesen Pfad, nicht jede Konfiguration, jedes Plugin, jeden Inhaltstyp und nicht zukünftige Releases.
Der Rest ist vernünftig: 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.
Realität beim Setup
pip install newspaper4k lädt 22 Pakete und 47,5 MiB in etwa sechs Sekunden. Kaltimport in einem frischen Subprozess: 2,812 s — der langsamste Wert im Vergleich.
| Bibliothek | Pakete | site-packages | Kaltimport | Extraktion p50 |
|---|---|---|---|---|
| resiliparse | 5 | 21,0 MiB | 0,015 s | 0,06 ms |
| jusText | 3 | 22,4 MiB | 0,777 s | 0,56 ms |
| goose3 | 16 | 44,3 MiB | 2,181 s | 1,85 ms |
| newspaper4k | 22 | 47,5 MiB | 2,812 s | 2,69 ms |
| trafilatura | 17 | 69,9 MiB | 1,584 s | 0,51 ms |
install-and-import.json. Jede Bibliothek in einer eigenen leeren Virtualenv, sodass nichts Abhängigkeiten von einer anderen Bibliothek erbt.
2,812 Sekunden Importzeit sind 187-mal so viel wie resiliparses 15 Millisekunden. In einem langfristig laufenden Worker zahlen Sie das einmal und ignorieren es danach. In einer Serverless-Funktion zahlen Sie es bei jedem Cold Start – und genau dann ist newspaper4k unabhängig von der Qualität der Extraktion die falsche Wahl.
Ein kleiner Haken beim Installieren: Beim Import erscheint eine Warnung:
UserWarning: nltk is not installed. Some NLP features will be unavailable. Install it with: pip install 'newspaper4k[nlp]'
Für diesen Test wurden diese Funktionen nicht benötigt, und die Extraktion funktionierte auch ohne sie einwandfrei. Allerdings ist die Basisinstallation nicht die vollständige Installation, und newspaper4k[nlp] bringt einen deutlich schwereren Abhängigkeitsbaum plus Corpus-Downloads mit. Planen Sie das nur ein, wenn Sie Keywords und Zusammenfassungen brauchen.
Speicher und was kaputtes HTML damit macht
Zwei Dinge, die in jeder Review dieser Gruppe zunächst als ungetestet galten, wurden jetzt gemessen.
Den breiteren Kontext des Stresstests finden Sie im Vergleich von zehn Bibliotheken hinsichtlich Speicherverbrauch und fehlerhaftem HTML.
Maximaler Resident Memory, per /usr/bin/time -l, jeweils ein frischer Prozess pro Zelle – die Import-Untergrenze ist das, was die Bibliothek im geladenen und ruhenden Zustand kostet; die Spitzenwerte enthalten das Dokument.
| Bibliothek | Laufzeit | Import-Basis (MiB) | 226 KB HTML Peak (MiB) | 10 MB HTML Peak (MiB) |
|---|---|---|---|---|
| html2text | python3.14 | 18,7 | 19,9 | 71,2 |
| pyquery | python3.14 | 30,3 | 33,9 | 172,5 |
| resiliparse | python3.14 | 20,5 | 25,1 | 225,1 |
| markdownify | python3.14 | 23,9 | 28,9 | 278,5 |
| goose3 | python3.14 | 44,1 | 52,4 | 398,5 |
| cheerio | node22 | 66,8 | 76,5 | 398,5 |
| justext | python3.14 | 30,3 | 36,6 | 431,2 |
| newspaper4k | python3.14 | 52,6 | 61,8 | 668,5 |
| trafilatura | python3.14 | 52,5 | 64,8 | 927,1 |
| turndown | node22 | 47,8 | 68,4 | 2947,1 |
memory-results.json. Python- und Node-Basiswerte sind nicht direkt miteinander vergleichbar; der Interpreter steckt in beiden.
newspaper4ks Basiswert liegt bei 52,6 MiB und sein Peak bei 10 MB HTML bei 668,5 MiB – damit ist es der zweitschwerste Wert unter den Python-Bibliotheken. Für normale Seiten ist das kein Problem; bei großen Dokumenten in einem speicherbegrenzten Worker spielt das aber eine Rolle.
Defektes HTML. Zwölf Dokumente, die jeweils genau eine Sache kaputt machen – nicht geschlossene Tags, falsch verschachtelte Inline-Elemente, nicht gequotete Attribute mit Leerzeichen, lose schließende Tags, gar kein <html>, doppelte Attribute, ein mitten im Tag abgeschnittenes Dokument, defekte Entities, ein nicht geschlossenes <script>, eine lügende Charset-Deklaration, ein Kommentar mit Markup und 600 Verschachtelungsebenen – plus zwei wohlgeformte Kontrollen in passenden Größen, denn „es kam nichts zurück“ sagt nur dann etwas über Fehlerhaftigkeit aus, wenn die Bibliothek bei einem sauberen Dokument derselben Größe nicht ebenfalls stumm bleibt.
Die Kontrollen und die fehlerhaften Fälle trennen sich in den Rohdaten sauber:
| Gruppe | Dokumente | Ausgelöst | Leere Ausgabe | Wiederhergestellte bewertete Sentinel-Tokens |
|---|---|---|---|---|
| Wohlgeformte Kontrollfälle mit passender Größe | 2 | 0 | 0 | nicht in die malformed-Bewertung einbezogen |
| Fehlerhafte Fixtures | 12 | 0 | 10 | 5/33, ohne den Fall mit dem nicht geschlossenen <script> |
Die beiden Kontrollen lieferten 70 bzw. 1.351 Zeichen, während zehn von zwölf fehlerhaften Eingaben einen leeren String ergaben. Damit ist die Stille in diesem Fixture-Design der Fehlerhaftigkeit zuzuordnen und nicht einfach einer kurzen Eingabe. Der Scorer prüft Überschrift-, Absatz- und Link-Sentinels über die elf zulässigen fehlerhaften Dokumente hinweg. Das Fixture mit dem nicht geschlossenen <script> wird ausgeschlossen, weil das nach HTML5-Parsing folgende Markup weiterhin Script-Inhalt bleibt. Siehe malformed-results.json. Das ist eine relevante Einschränkung für die Auswahl und nicht bloß ein „hat nicht ausgelöst“-Erfolg.
Vor- und Nachteile
Dafür spricht es. Keine markierten Boilerplate-Tokens in diesem Vergleich, Ausgabe bei allen 22 kontrollierten Artikel-Fixtures und ein bewerteter Artikel-Recall von 0,9865. Es stellt Artikeltext plus Metadatenfelder bereit, auch wenn die Metadaten-Genauigkeit nicht getestet wurde. Der getestete Pfad mit übergebenem HTML erzeugte bei blockiertem socket.connect keine Netzwerkzugriffe. Das Repository hatte beim Check einen jüngeren datierten Push; die allgemeine Wartungsqualität wurde nicht bewertet.
Dagegen spricht es. Der schwerste Kaltimport im Set mit 2,812 s und 22 Paketen / 47,5 MiB gemessener site-packages-Größe. honor_robotstxt ist standardmäßig False, und Multi-Article-Helfer nutzen standardmäßig zehn Threads. Die Basisinstallation warnt vor fehlendem NLTK, daher brauchen Keywords und Zusammenfassungen eine schwerere optionale Installation. Am wichtigsten: Zehn von zwölf fehlerhaften Fixtures gaben leere Ausgaben zurück, obwohl beide wohlgeformten Kontrollen Text produzierten.
Für wen es geeignet ist – und für wen nicht
newspaper4k lohnt sich, wenn Ihre Priorität lautet: nicht-leeren Text auf dem kontrollierten, artikelorientierten Korpus erzeugen, markierte Boilerplate in diesem Korpus minimieren und einen langsameren Kaltimport akzeptieren. Unter dieser expliziten Regel lag es in diesem Fixture-Vergleich vorne. Eine andere Regel kann Readability wegen maximaler Inhaltserhaltung oder resiliparse wegen Start- und Median-Geschwindigkeit bevorzugen.
Lieber auslassen oder sehr sorgfältig vorab testen, wenn Cold Start dominiert, 47,5 MiB gemessene site-packages relevant sind oder die Wiederherstellung bei kaputtem HTML wichtig ist. Resiliparse importierte hier 187-mal schneller, lag aber bei den Qualitätswerten nicht in allen Spalten vor trafilatura: trafilatura hatte einen höheren Artikel-Recall, während sich auch ihre Leak- und Präzisionsprofile unterschieden. newspaper4k ist auf Artikel fokussiert; Produktlisten und Dashboards wurden nicht getestet, daher wird dafür kein Verhalten behauptet.
Egal was Sie tun: Setzen Sie honor_robotstxt, wenn die Bibliothek selbst fetchen darf. Das ist kein Performance-Hinweis.
Wo eine verwaltete API passt
newspaper4k kann HTML parsen, das vom Aufrufer bereitgestellt wird, und verfügt auch über Fetching-Pfade. Ein verwalteter Extraktionsdienst verlagert Beschaffung, Rendering und Schema-Arbeit stattdessen hinter eine Anbieter-Grenze. Wir entwickeln Thunderbit, haben es aber nicht gegen diesen Fixture-Satz laufen lassen; daher enthält diese Review keinen Vergleich zu Qualität, Rendering, Anti-Bot-Verhalten, Latenz oder Kosten. Für gespeichertes Artikel-HTML geht es hier nur um newspaper4k; Nicht-Artikel-Ziele brauchen ihre eigene Bewertung.
Die gleichen Fixtures über alle sechs Extraktoren hinweg sehen Sie im Vergleich der sechs Extraktionsbibliotheken.
Für den gehosteten Bereich bietet unsere Übersicht der Web-Scraping-APIs den größeren Blick; für Self-Hosted-Alternativen den Open-Source-Scraper-Leitartikel. Wenn der Text in ein Modell geht, zeigt HTML in Python zu Markdown konvertieren, wo Fidelity verloren geht.
Thunderbit für Web-Datenextraktion testen
Sollten Sie newspaper4k verwenden?
Betrachten Sie newspaper4k als starken Kandidaten für die Extraktion von Artikeltext, wenn HTML bereits vorliegt, und führen Sie dann vor der Einführung einen realen Bake-off mit Ihrem eigenen Korpus durch. Der kontrollierte Satz spricht für hohen bewerteten Artikel-Recall, keine markierte Boilerplate und nicht-leere Ausgabe bei allen 22 artikelorientierten Fixtures. Er deckt jedoch keine realen Seiten und keine Metadaten-Genauigkeit ab, und zehn von zwölf fehlerhaften Fixtures lieferten leere Ausgaben.
Wenn Sie den Fetching-Pfad nutzen, prüfen Sie honor_robotstxt=False, die Zehn-Thread-Parallelität und hostbezogene Rate-Limits ausdrücklich. Wenn Cold Start oder der Abhängigkeits-Footprint wichtig sind, messen Sie den lokalen Import von 2,812 Sekunden und die Beobachtung von 47,5 MiB site-packages in Ihrer eigenen Umgebung, statt sie als allgemeine Container-Kosten zu behandeln.
Thunderbit für Web-Datenextraktion testen Get Started Free
FAQs
Warum funktioniert set_html() nicht?
Weil es in newspaper4k nicht existiert. HTML wird über download(input_html=html) übergeben, danach folgt parse(). Suchergebnisse können Beispiele zu newspaper3k anzeigen, wodurch dieser Fehler leicht passiert; mir ist er im ersten Lauf ebenfalls unterlaufen, und ich habe das Test-Harness vor der Bewertung korrigiert.
Beachtet newspaper4k robots.txt?
Nicht standardmäßig. honor_robotstxt wird mit False ausgeliefert. Setzen Sie es in Ihrer Configuration auf True, wenn die Bibliothek selbst fetchen soll, oder übergeben Sie input_html und holen Sie die Inhalte selbst. Multi-Article-Arbeit nutzt ebenfalls standardmäßig zehn Threads. Das ist nicht fest vorgegebene Request-Rate, sondern freie Parallelität; legen Sie beim Fetching explizite Limits pro Host fest.
Macht parse() Netzwerkrequests?
Bei newspaper4k 0.9.6 hat der getestete Pfad download(input_html=…) plus parse() bei einem gehaltenen HTML-Eingang keine Verbindungsversuche unternommen, während socket.connect blockiert war. Das belegt nicht, dass jede Parser-Konfiguration, jedes Plugin, jeder Inhaltstyp oder zukünftige Release netzwerkfrei ist.
Was bedeutet die NLTK-Warnung beim Import?
Die Basisinstallation enthält kein NLTK, daher sind Keyword-Extraktion und Zusammenfassung nicht verfügbar; die Bibliothek weist beim Import darauf hin. Die Extraktion selbst bleibt davon unberührt – alles hier Gemessene lief auf der Basisinstallation. pip install 'newspaper4k[nlp]' ergänzt diese Funktionen, bringt aber einen deutlich schwereren Abhängigkeitsbaum und Corpus-Downloads mit.
Was hat diese Review nicht getestet? Echte Webseiten – hier handelt es sich um kontrollierte Fixtures mit markierten Einheiten. Metadatenfelder wurden inventarisiert, aber nicht auf Titel-, Autoren-, Datums- oder Bildgenauigkeit bewertet. Mehrsprachige Extraktion, NLP-Zusätze, mehrthreadiges Crawling von Quellen und Durchsatz unter Last wurden ebenfalls nicht getestet. Der maximale Prozessspeicher wurde an einem 226-KB- und einem 10-MB-HTML-Eingang gemessen, nicht unter Parallelität oder Dauerlast.


