V rámci jedné anotované sady fixture zaměřené na články poskytl newspaper4k výstup u všech 22 fixture, obnovil 98,65 % bodovaných článkových jednotek a neobsahoval žádné označené boilerplate tokeny. Tyto tři výsledky z něj dělají silného kandidáta podle priorit tohoto testu; samy o sobě ale neurčují jednoznačného vítěze.
V této sadě nic dalšího nespojilo všechny tři pozorované výsledky najednou. Mozilla Readability zachytila každou bodovanou obsahovou jednotku, ale přidala více označeného boilerplate; goose3 neobsahoval žádný označený boilerplate, ale dvakrát vrátil prázdný řetězec. Jiná rozhodovací kritéria tak mohou dát přednost jiné knihovně.
Před nasazením je potřeba výslovně pohlídat jedno výchozí nastavení pro fetchování.
Co je newspaper4k
newspaper4k je udržovaný fork newspaper3k, který byl sám pokračováním původního newspaper pro Python 3. Tahle genealogie je důležitá při hledání pomoci, protože většina výsledků na internetu odkazuje na předchůdce a část API se mezitím změnila.
Oficiální reference: oficiální repozitář newspaper4k.

Nejčastější chyba při používání této knihovny je sáhnout po set_html(). Tahle metoda neexistuje. HTML se předává přes download():
from newspaper import Article
a = Article(url="https://example.com/story")
a.download(input_html=html) # not set_html()
a.parse()
text = a.text
Při prvním spuštění jsem to udělal špatně i já a předtím, než jsem ověřil, zda je chyba na mé straně, jsem knihovně přisoudil skóre 0 z 22 fixture. Byla to moje chyba.
Nejde jen o text. Objekt Article zpřístupňuje pole jako text, title, authors, publish_date, top_image, images, movies, meta_description, meta_lang, tags a article_html. keywords a summary vyžadují volitelnou NLP instalaci a nastavení korpusu popsané níže. Povrch polí byl zmapován, ale přesnost metadat se nehodnotila.
Testovaná verze: 0.9.6, MIT, 1 135 hvězdiček na GitHubu, s posledním push datovaným 2026-07-31. Toto datum je jen momentka, ne kompletní hodnocení stavu údržby. Python 3.14.2.
Výsledek
| Knihovna | Pokrytí článků (všech 22) | Únik boilerplate | Přesnost obsahových tokenů | Kontaminující tokeny | Vyprodukovaný výstup |
|---|---|---|---|---|---|
| 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. Každá jednotka v každé fixture nese jedinečný sentinel token, takže „zachyceno“ a „uniklo“ jsou přesně členství v podřetězci, nikoli podobnostní skóre. Pokrytí je počítáno přes všech 22 fixture; únik a přesnost přes 11 fixture, které obsahují článek i boilerplate.
Je užitečné oddělit tři sloupce.
Odpověděl na každou stránku. goose3 a jusText ne — 20 a 19 z 22. To je důležitější, než to na první pohled vypadá, protože přesnost a F1 v podobné tabulce jsou podmíněné tím, že výstup vůbec existuje: knihovna, která vrátí prázdný řetězec, nepřispívá ani na jednu stranu poměru, takže „nevrátit nic“ je zadarmo. Přesnost goose3 1.0000 byla měřena na 10 z 11 fixture; newspaper4k 0.9452 na 11 z 11. Nejde tedy úplně o totéž měření.
Neprošlo nic navíc. Fixture obsahují záměrně adversariální boilerplate — promo bloky v neutrální třídě vedle článku, komentářová vlákna s nevinně vypadajícími názvy tříd, reklamní bloky, které neobsahují slovo „ad“. Heuristika Readability založená na připojování sourozenců několik z nich pohltila; newspaper4k žádný z nich.
Přehlédl jednu jednotku ze 74, a ta přehlédnutá je sdílená.
Chyba se týká neprozaické fixture — stránky postavené z tabulek, kódu, krátkých položek a popisku obrázku místo odstavců — a jednotka, kterou vynechal, je popisek. Není v tom sám:
| Knihovna | Pokrytí na neprozaické stránce | Vynechané jednotky |
|---|---|---|
| Readability | 1.000 | — |
| jusText | 1.000 | — |
| trafilatura | 0.875 | popisek |
| resiliparse | 0.875 | popisek |
| newspaper4k | 0.875 | popisek |
| goose3 | 0.250 | obě tabulky, blok kódu, obě krátké položky, popisek |
Tři knihovny vynechaly stejný popisek a nic dalšího, což působí méně jako tři oddělené chyby a spíš jako sdílený zděděný předpoklad o tom, co má popisek „stát za to“. Pokud je váš obsah dokumentace, recepty nebo cokoli, kde popisek nese informace, které odstavec nemá, stojí za to to před rozhodnutím otestovat — a Readability i jusText ho zachovaly.
Stejná fixture je místo, kde goose3 padá úplně, ztrácí tři čtvrtiny stránky, takže „neprozaický obsah“ je osa, na níž se těchto šest nástrojů liší mnohem víc, než napovídá hlavní tabulka.
Pokud jde o rychlost, medián extrakce newspaper4k napříč 22 fixture byl 2,69 ms, tedy nejpomalejší ze šesti, s nejhorším případem 199,81 ms. Oproti mediánu resiliparse 0,06 ms jde v tomto kontrolovaném běhu o 45× rozdíl. Medián může být v pracovním toku s jednou stránkou zanedbatelný, ale propustnost a tail latency pod zátěží nebyly testovány. Studený import měříme níže zvlášť.
Výchozí nastavení, které bych změnil na první řádce

Oficiální reference: dokumentace newspaper4k.
Při pohledu na dodávaný objekt Configuration narazíte na dvaadvacet nastavení. Jedno z nich je toto:

_honor_robotstxt = False
newspaper4k nerespektuje robots.txt, pokud mu to výslovně nepovolíte. Když necháte knihovnu fetchovat — Article(url).download() bez input_html — stáhne cokoli, na co ji pošlete, bez ohledu na to, co říká soubor robots na webu.
To je obhajitelný výchozí stav pro knihovnu, jejíž hlavní použití je parsování HTML, které už máte k dispozici, a neobhajitelný default, který je nepříjemné objevit až v produkci, když na něj namíříte tisíc URL. Nastavte na Configuration honor_robotstxt=True, nebo předávejte input_html a fetchování dělejte sami — což jsem v tomto testu dělal po celou dobu.
Ještě dvě hodnoty, které stojí za známost:
number_threads = 10. Výchozí paralelismus pro pomocné funkce nad více články je deset vláken. Současný běh neznamená počet požadavků za sekundu, ale může vyvolat náraz více současných requestů, pokud nenastavíte explicitní limity na hostitele a plánování.
fetch_images = True. Fetchování obrázků je zapnuté ve výchozím stavu, což otevírá otázku offline použití. S blokovaným socket.connect testovaná cesta newspaper4k 0.9.6 — download(input_html=…) následované parse() na jednom drženém HTML vstupu — doběhla, vrátila 1 292 znaků a nepokusila se o žádné síťové spojení. To potvrzuje právě tuto konkrétní cestu, ne každou konfiguraci, plugin, typ obsahu ani budoucí vydání.
Zbytek je rozumný: 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.
Jak vypadá instalace v praxi
pip install newspaper4k stáhne 22 balíčků a 47,5 MiB zhruba za šest sekund. Studený import v novém subprocessu: 2,812 s — nejpomalejší v porovnání.
| Knihovna | Balíčky | site-packages | Studený import | Extrakce 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. Každá knihovna ve vlastním prázdném virtualenv, takže nic nezdědí závislosti po sousedovi.
2,812 sekundy na import je 187× víc než 15 milisekund u resiliparse. V dlouho běžícím workeru to zaplatíte jednou a není to podstatné. V serverless funkci to ale platíte při každém cold startu, a to je případ, kdy je newspaper4k špatná volba bez ohledu na to, jak dobrá je jeho extrakce.
Jedna drobnost k instalaci. Import vypíše varování:
UserWarning: nltk is not installed. Some NLP features will be unavailable. Install it with: pip install 'newspaper4k[nlp]'
V tomto testu nebyly tyto funkce potřeba a extrakce fungovala bez problémů i bez nich, ale základní instalace není kompletní instalace a newspaper4k[nlp] přidává výrazně těžší strom závislostí plus stahování korpusu. S tím počítejte jen tehdy, pokud chcete klíčová slova a shrnutí.
Paměť a co s ní udělá rozbitý HTML
Dvě věci, které každá recenze v této sadě uváděla jako netestované, jsou nyní změřené.
Širší kontext zátěžového testu je v porovnání paměti a nevalidního HTML u deseti knihoven.
Špičková rezidentní paměť, přes /usr/bin/time -l, jeden nový proces na buňku — podlaha importu je to, co knihovna stojí po načtení a v klidu, špičky zahrnují dokument.
| Knihovna | Runtime | Import floor (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. Základy v Pythonu a Node nejsou navzájem přímo porovnatelné; interpreter je součástí obou.
Podlaha newspaper4k je 52,6 MiB a špička při 10 MB HTML je 668,5 MiB — druhá nejtěžší mezi Python knihovnami. Ani jedno nepředstavuje problém pro běžné stránky; obojí ale záleží, pokud dávkujete velké dokumenty v workeru s paměťovým limitem.
Rozbité HTML. Dvanáct dokumentů, z nichž každý kazí přesně jednu věc — neukončené tagy, špatně zanořené inline prvky, neoznačené atributy s mezerami, osamělé uzávěry, žádné <html>, duplicitní atributy, dokument uříznutý uprostřed tagu, špatné entity, neukončený <script>, lživé deklarace charsetu, komentář obsahující markup a 600 úrovní zanoření — plus dva dobře formované kontrolní dokumenty ve shodných velikostech, protože tvrzení „nic nevrátil“ něco říká o nevaliditě jen tehdy, když knihovna není tichá i na čistém dokumentu stejné velikosti.
Kontroly a rozbité případy se v surových výsledcích jasně oddělují:
| Skupina | Dokumenty | Vyvolána výjimka | Prázdný výstup | Obnovené bodované sentinel tokeny |
|---|---|---|---|---|
| Dobře formované kontrolní dokumenty | 2 | 0 | 0 | nepoužito v bodování rozbitého HTML |
| Rozbité fixture | 12 | 0 | 10 | 5/33, bez případu s neukončeným <script> |
Dvě kontroly vygenerovaly 70 a 1 351 znaků, zatímco deset z dvanácti rozbitých vstupů vrátilo prázdný řetězec. Ticho je tak v tomto návrhu fixture přičitatelné nevaliditě, ne jen krátkému vstupu. Skórovač kontroluje sentinel tokeny v nadpisu, odstavci a odkazu napříč jedenácti způsobilými rozbitými dokumenty. Fixture s neukončeným <script> je vynechána, protože podle HTML5 parsování zůstává následující markup součástí skriptu. Viz malformed-results.json. To je výrazné omezení obnovy, které je potřeba vzít do výběru, ne jen „nevyvolalo výjimku“ jako úspěch.
Klady a zápory
Ve prospěch. V tomto porovnání žádné označené boilerplate tokeny, výstup na všech 22 kontrolovaných článkových fixture a 0,9865 bodovaného pokrytí článků. Zpřístupňuje text článku i metadata, i když přesnost metadat nebyla testována. Cesta s drženým HTML při blokovaném socket.connect neprovedla žádné pokusy o síťové spojení. Při kontrole měl repozitář nedávný datovaný push; širší zdraví údržby se nehodnotilo.
Proti. Nejtěžší studený import v sadě: 2,812 s a 22 balíčků / 47,5 MiB změřeného site-packages. honor_robotstxt je ve výchozím stavu False a pomocné funkce pro více článků defaultně používají deset vláken. Základní instalace upozorňuje na chybějící NLTK, takže klíčová slova a shrnutí vyžadují těžší volitelnou instalaci. A hlavně: deset z dvanácti rozbitých fixture vrátilo prázdný výstup, i když obě dobře formované kontroly text vrátily.
Kdo by jej měl použít a kdo ne
Zvažte newspaper4k, pokud je vaše pořadí priorit: dostat neprázdný text na této kontrolované, článkově orientované sadě, minimalizovat označený boilerplate v této sadě a smířit se s pomalejším studeným importem. Podle tohoto explicitního pravidla v tomto porovnání vedl. Jiná pravidla mohou zvolit Readability pro maximální zachování obsahu nebo resiliparse pro rychlost startu a medián extrakce.
Přeskočte ho nebo testujte velmi pečlivě, pokud rozhoduje cold start, pokud je podstatných 47,5 MiB změřeného site-packages, nebo pokud záleží na obnově z rozbitého HTML. Resiliparse zde importoval 187× rychleji, ale na všech kvalitativních sloupcích nevyrovnal trafilatura: trafilatura měla vyšší pokrytí článků a jejich profily úniku a přesnosti se také lišily. newspaper4k je zaměřený na články; produktové seznamy a dashboardy nebyly testovány, takže o jejich chování zde nic netvrdíme.
Ať uděláte cokoli, nastavte honor_robotstxt, pokud necháte knihovnu fetchovat. To není poznámka o výkonu.
Kde dává smysl spravované API
newspaper4k umí parsovat HTML dodané volajícím a má i fetchovací cesty. Spravovaná extrakční služba přesouvá získávání, renderování i práci se schématem za hranici dodavatele. My stavíme Thunderbit, ale na tuto sadu fixture nebyl nasazen, takže tato recenze neposkytuje žádné srovnání kvality, renderingu, anti-bot ochrany, latence ani ceny. U drženého HTML článku se zde hodnotí pouze newspaper4k; nečlánkové cíle potřebují vlastní evaluaci.
Stejné fixture napříč všemi šesti extraktory najdete v porovnání šesti knihoven pro extrakci článků.
Pro hostovanou variantu je širší pohled v našem přehledu API pro web scraping; pro self-hosted alternativy v přehledu open-source scraperů. Pokud text míří do modelu, převod HTML do Markdownu v Pythonu ukazuje, kde se ztrácí věrnost.
Vyzkoušet Thunderbit pro extrakci webových dat
Měli byste použít newspaper4k?
newspaper4k berte jako silného kandidáta na extrakci textu článků, když už HTML máte k dispozici, a před zavedením si na vlastním korpusu udělejte reálný bake-off na skutečných webech. Kontrolovaná sada podporuje vysoké bodované pokrytí článků, žádný označený boilerplate a neprázdný výstup u všech 22 článkově orientovaných fixture. Nepokrývá však reálné stránky ani přesnost metadat a deset z dvanácti rozbitých fixture vrátilo prázdný výstup.
Pokud používáte fetchovací cestu, explicitně si pohlídejte honor_robotstxt=False, desetivláknový paralelismus a limity na úrovni hostitele. Pokud záleží na cold startu nebo velikosti závislostí, změřte si lokální import za 2,812 s a pozorování 47,5 MiB site-packages ve svém nasazení, ne jako univerzální náklad kontejneru.
Vyzkoušet Thunderbit pro extrakci webových dat Get Started Free
Časté dotazy
Proč nefunguje set_html()?
Protože v newspaper4k neexistuje. HTML se předává přes download(input_html=html) a pak parse(). Ve výsledcích vyhledávání se mohou objevit příklady pro newspaper3k, takže je to snadná chyba; já ji při prvním běhu udělal také a před bodováním jsem opravil testovací harness.
Respektuje newspaper4k robots.txt?
Ve výchozím stavu ne. honor_robotstxt je dodáváno jako False. Pokud knihovna fetchuje, nastavte ho na True na Configuration, nebo předávejte input_html a fetchujte sami. Vícečlánkové zpracování také defaultně používá deset vláken. To je nevybraná paralelizace, ne pevná rychlost requestů; pro fetchování nastavte explicitní limity na hostitele.
Dělá parse() síťové požadavky?
U newspaper4k 0.9.6 testovaná cesta download(input_html=…) následovaná parse() neprovedla při blokovaném socket.connect žádný pokus o spojení pro jeden držený HTML vstup. To ale neznamená, že každá konfigurace parseru, každý plugin, každý typ obsahu ani budoucí verze budou bez síťové aktivity.
Co znamená varování NLTK při importu?
Základní instalace neobsahuje NLTK, takže extrakce klíčových slov a shrnování nejsou k dispozici a knihovna to při importu oznámí. Samotná extrakce tím dotčena není — vše měřené zde běželo na základní instalaci. pip install 'newspaper4k[nlp]' je přidá spolu s těžším stromem závislostí a stahováním korpusu.
Co tato recenze netestovala? Skutečné stránky — jde o kontrolované fixture s označenými jednotkami. Metadata byla zmapována, ale nehodnotila se přesnost názvu, autora, data ani obrázků. Netestovala se ani vícejazyčná extrakce, NLP rozšíření, paralelní crawling více zdrojů a průchodnost pod zátěží. Špičková paměť procesu byla měřena na jednom vstupu HTML o velikosti 226 KB a jednom o velikosti 10 MB, ne při souběhu ani dlouhodobé zátěži.


