newspaper4k — wyniki na 22 z 22 kontrolowanych próbek artykułów

Ostatnia aktualizacja: August 17, 2026
newspaper4k — wyniki na 22 z 22 kontrolowanych próbek artykułów
Podsumowanie AI
W jednym oznaczonym zestawie próbek nastawionym na artykuły newspaper4k wygenerował wynik dla wszystkich 22 próbek, odzyskał 98,65% ocenianych jednostek artykułu i nie zawierał żadnych oznaczonych tokenów boilerplate. Te trzy cechy czynią go mocnym kandydatem w ramach priorytetów tego testu; nie przesądzają jednak o uniwersalnym zwycięzcy. Żadne inne narzędzie w tym zestawie nie połączyło tych trzech zaobserwowanych wyników. Mozilla Readability odzyskał każdą ocenianą jednostkę treści, ale zawierał więcej oznaczonego boilerplate; goose3 nie zawierał oznaczonego boilerplate, lecz dwa razy zwrócił puste ciągi. Inne kryteria wyboru mogą preferować inną bibliotekę.

W jednym oznaczonym zestawie próbek nastawionym na artykuły, newspaper4k wygenerował wynik dla wszystkich 22 próbek, odzyskał 98,65% ocenianych jednostek treści artykułu i nie zawierał żadnych oznaczonych tokenów boilerplate. Te trzy cechy czynią go mocnym kandydatem w ramach priorytetów tego testu; nie przesądzają jednak o uniwersalnym zwycięzcy.

Żadne inne narzędzie w tym zestawie nie połączyło tych trzech zaobserwowanych wyników. Mozilla Readability odzyskał każdą ocenianą jednostkę treści, ale zawierał więcej oznaczonego boilerplate; goose3 nie zawierał oznaczonego boilerplate, lecz dwa razy zwrócił puste ciągi. Inne kryteria wyboru mogą preferować inną bibliotekę.

Jedna domyślna opcja pobierania zasługuje na wyraźne omówienie przed wdrożeniem.

Czym jest newspaper4k

newspaper4k to utrzymywana odnoga newspaper3k, a ta z kolei była kontynuacją oryginalnego newspaper dla Pythona 3. Ten rodowód ma znaczenie, gdy szukasz pomocy, ponieważ większość materiałów w sieci odnosi się do starszego projektu, a część jego API została przeniesiona lub zmieniona.

Oficjalne źródło: oficjalne repozytorium newspaper4k.

System diagram: Article Extraction Pipeline

Najczęstszym błędem przy korzystaniu z tej biblioteki jest sięgnięcie po set_html(). Taka metoda nie istnieje. HTML trafia do biblioteki przez download():

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

Za pierwszym razem też zrobiłem to źle i przyznałem bibliotece 0 z 22 próbek, zanim sprawdziłem, czy błąd nie leżał po mojej stronie. I rzeczywiście — leżał.

Zwrot, który dostajesz, to nie tylko tekst. Obiekt Article udostępnia pola takie jak text, title, authors, publish_date, top_image, images, movies, meta_description, meta_lang, tags i article_html. keywords oraz summary wymagają opcjonalnej instalacji NLP i konfiguracji korpusu opisanej niżej. Zakres pól został zinwentaryzowany, ale dokładność metadanych nie była oceniana.

Testowana wersja: 0.9.6, MIT, 1 135 gwiazdek GitHub, z datą ostatniego pushu w repozytorium 2026-07-31. Taka data aktywności jest tylko migawką, a nie pełną oceną kondycji projektu. Python 3.14.2.

Wynik

BibliotekaOdzysk artykułu (wszystkie 22)Wyciek boilerplatePrecyzja tokenów treściZanieczyszczające tokenyWygenerowano wynik
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. Każda jednostka w każdej próbce ma unikalny token-sentinel, więc „odzyskane” i „wyciekłe” oznaczają dokładne wystąpienie podciągu, a nie wynik podobieństwa. Recall liczony jest dla wszystkich 22 próbek; wyciek i precyzja — dla 11 próbek zawierających zarówno artykuł, jak i boilerplate.

Warto rozdzielić trzy kolumny.

Odpowiedział na każdą stronę. goose3 i jusText tego nie zrobiły — odpowiednio 20 i 19 z 22. To ma większe znaczenie, niż się wydaje, bo precyzja i F1 w takiej tabeli są warunkowe wobec wygenerowania wyniku: biblioteka, która zwraca pusty ciąg, nie wchodzi do licznika ani po jednej, ani po drugiej stronie, więc „odmowa” jest darmowa. Precyzja goose3 na poziomie 1.0000 została policzona na 10 z 11 próbek; newspaper4k osiągnął 0.9452 na 11 z 11. To nie jest dokładnie ta sama miara.

Nie wyciekło nic. Próbki zawierają celowo adversarialny boilerplate — neutralnie sklasyfikowane bloki promocyjne stojące jako rodzeństwo artykułu, wątki komentarzy pod niewinnymi nazwami klas, bloki reklam nieopisane jako „ad”. Heurystyka Readability oparta na dołączaniu rodzeństwa „połknęła” kilka z nich; newspaper4k nie przepuścił żadnego.

Pominął jedną jednostkę z 74, i ta pominięta jednostka jest współdzielona.

Pominięcie dotyczy próbki bez klasycznej prozy — strony zbudowanej z tabel, bloku kodu, krótkich elementów i podpisu obrazka zamiast akapitów — a brakującą jednostką jest podpis. Nie jest w tym osamotniony:

BibliotekaRecall na stronie bez prozyPominięte jednostki
Readability1.000
jusText1.000
trafilatura0.875podpis
resiliparse0.875podpis
newspaper4k0.875podpis
goose30.250obie tabele, blok kodu, oba krótkie elementy, podpis

Trzy biblioteki pomijają ten sam podpis i żadnej innej jednostki, co bardziej przypomina wspólne założenie odziedziczone niż trzy osobne błędy. Jeśli Twoje treści to dokumentacja, przepisy albo coś, gdzie podpis niesie informację, której nie ma w akapicie, warto to przetestować przed podjęciem decyzji — Readability i jusText zachowały ten element.

Ta sama próbka pokazuje też, że goose3 zupełnie się rozsypuje, tracąc trzy czwarte strony, więc „treść niebędąca prozą” to oś, na której te sześć narzędzi różni się znacznie bardziej, niż sugeruje nagłówek tabeli.

Pod względem szybkości mediana ekstrakcji newspaper4k na 22 próbkach wyniosła 2,69 ms, czyli najwolniej z całej szóstki, a najgorszy przypadek to 199,81 ms. W porównaniu z medianą resiliparse na poziomie 0,06 ms daje to w tym kontrolowanym teście różnicę 45×. Mediana może być mała w pracy na pojedynczej stronie, ale przepustowość i opóźnienia ogonowe pod obciążeniem nie były testowane. Zimny import mierzymy osobno poniżej.

Domyślna opcja, którą zmieniłbym w pierwszej linijce

System diagram: The default I would change on line one

Oficjalne źródło: dokumentacja newspaper4k.

Przegląd dostarczanego obiektu Configuration ujawnia 22 ustawienia. Jedno z nich wygląda tak:

System diagram: Separate Fetching From Extraction

_honor_robotstxt = False

newspaper4k nie respektuje robots.txt, chyba że mu to wyraźnie ustawisz. Jeśli pozwolisz mu pobierać treść — Article(url).download() bez input_html — pobierze to, na co wskażesz, niezależnie od zawartości pliku robots danej witryny.

To da się obronić jako domyślne zachowanie biblioteki, której głównym zadaniem jest parsowanie HTML, który już posiadasz. To natomiast fatalne zaskoczenie w produkcji, jeśli wskazałeś mu tysiąc adresów URL. Ustaw honor_robotstxt=True w Configuration albo przekaż input_html i pobieraj dane samodzielnie — tak właśnie zrobiłem w całym tym teście.

Dwie kolejne rzeczy warte zapamiętania:

number_threads = 10. Domyślna równoległość dla narzędzi obsługujących wiele artykułów wynosi dziesięć. Równoległość to nie to samo co liczba żądań na sekundę, ale może wywołać serię jednoczesnych requestów, jeśli nie ustawisz limitów per host i harmonogramu.

fetch_images = True. Pobieranie obrazów jest domyślnie włączone, co rodzi pytanie o użycie offline. Przy zablokowanym socket.connect testowana ścieżka newspaper4k 0.9.6 — download(input_html=…) i następnie parse() na jednym wejściu HTML trzymanym w pamięci — zakończyła się sukcesem, zwróciła 1 292 znaki i podjęła zero prób połączenia z siecią. Potwierdza to dokładnie tę ścieżkę, nie każdą konfigurację, wtyczkę, typ treści ani przyszłą wersję.

Reszta ustawień jest rozsądna: 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.

Rzeczywistość instalacji

pip install newspaper4k pobiera 22 pakiety i 47,5 MiB w około sześć sekund. Zimny import w świeżym podprocesie: 2,812 s — najwolniej w porównaniu.

BibliotekaPakietysite-packagesZimny importExtraction 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. Każda biblioteka działała w osobnym pustym virtualenv, więc nic nie dziedziczyło zależności po sąsiedzie.

2,812 sekundy na import to 187 razy więcej niż 15 milisekund resiliparse. W długo działającym workerze płacisz to raz i nie ma to znaczenia. W funkcji serverless płacisz przy każdym zimnym starcie, i to jest przypadek, w którym newspaper4k jest złym wyborem niezależnie od jakości ekstrakcji.

Jest też jedna szorstka krawędź przy instalacji. Import wypisuje ostrzeżenie:

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

Nic w tym teście nie potrzebowało tych funkcji i ekstrakcja działała bez problemu bez nich, ale podstawowa instalacja nie jest instalacją pełną, a newspaper4k[nlp] dociąga znacznie cięższe drzewo zależności oraz pobieranie korpusów. Uwzględnij to tylko wtedy, gdy zależy Ci na słowach kluczowych i streszczeniach.

Pamięć i wpływ uszkodzonego HTML

Dwie rzeczy, które w tej serii recenzji wcześniej były oznaczone jako nieprzetestowane, zostały teraz zmierzone.

Szerszy kontekst testu obciążeniowego znajdziesz w porównaniu pamięci i uszkodzonego HTML dla dziesięciu bibliotek.

Szczytowe zużycie pamięci rezydentnej, przez /usr/bin/time -l, osobny świeży proces dla każdej komórki — dolny próg importu to koszt samej załadowanej i bezczynnej biblioteki, a szczyty obejmują dokument.

BibliotekaRuntimePróg importu (MiB)Szczyt dla HTML 226 KB (MiB)Szczyt dla HTML 10 MB (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. Bazowe wyniki Pythona i Node nie są ze sobą porównywalne; interpreter jest w obu przypadkach częścią kosztu.

Próg newspaper4k to 52,6 MiB, a szczyt dla 10 MB HTML to 668,5 MiB — drugi najwyższy wynik wśród bibliotek Pythona. Żadna z tych wartości nie stanowi problemu dla zwykłych stron; obie mają znaczenie, jeśli przetwarzasz duże dokumenty w workerze z limitem pamięci.

Uszkodzony HTML. Dwanaście dokumentów, z których każdy psuje dokładnie jedną rzecz — niezamykanie tagów, złą zagnieżdżoność elementów inline, niecytowane atrybuty ze spacjami, osierocone zamknięcia, brak <html> w ogóle, zduplikowane atrybuty, dokument ucięty w połowie taga, błędne encje, niezamknięty <script>, kłamliwa deklaracja charsetu, komentarz zawierający markup i 600 poziomów zagnieżdżenia — plus dwie poprawnie uformowane próbki kontrolne o dopasowanym rozmiarze, bo samo „zwrócił nic” mówi cokolwiek o uszkodzeniu tylko wtedy, gdy biblioteka nie milczy też na czystym dokumencie tej samej wielkości.

Próbki kontrolne i uszkodzone rozdzielają się wyraźnie w surowych wynikach:

GrupaDokumentyZgłoszono błądPusty wynikOdzyskane oceniane sentinele
Poprawne kontrole o dopasowanym rozmiarze200nieużywane w wyniku dla uszkodzonych
Próbki uszkodzone120105/33, z wyłączeniem przypadku z niezamkniętym <script>

Dwie kontrole zwróciły 70 i 1 351 znaków, podczas gdy 10 z 12 uszkodzonych wejść zwróciło pusty ciąg. Dzięki temu cisza wyniku da się przypisać samemu uszkodzeniu w tym projekcie próbek, a nie po prostu krótkiemu wejściu. Ocenianie sprawdza sentinele w nagłówkach, akapitach i linkach we wszystkich jedenastu kwalifikujących się uszkodzonych dokumentach. Próbka z niezamkniętym <script> jest wyłączona, ponieważ zgodnie z parsowaniem HTML5 dalszy markup pozostaje zawartością skryptu. Zobacz malformed-results.json. To ważne ograniczenie odzyskiwania, które trzeba uwzględnić przy wyborze narzędzia, a nie tylko sukces typu „nie rzucił wyjątku”.

Plusy i minusy

Na korzyść. Brak oznaczonych tokenów boilerplate w tym porównaniu, wynik na wszystkich 22 kontrolowanych próbkach artykułowych i 0,9865 odzysku ocenianych jednostek artykułu. Ujawnia tekst artykułu oraz pola metadanych, choć dokładność metadanych nie była testowana. Testowana ścieżka z przekazanym HTML nie podejmowała żadnych prób sieciowych przy zablokowanym socket.connect. Gdy sprawdzano repozytorium, miało niedawny datowany push; szersza kondycja utrzymania projektu nie była oceniana.

Przeciwko. Najcięższy zimny import w zestawie: 2,812 s i 22 pakiety / 47,5 MiB zmierzonych site-packages. honor_robotstxt domyślnie ma wartość False, a pomocniki do wielu artykułów domyślnie używają dziesięciu wątków. Podstawowa instalacja ostrzega o brakującym NLTK, więc słowa kluczowe i streszczenia wymagają cięższej, opcjonalnej instalacji. Co najważniejsze, 10 z 12 uszkodzonych próbek zwróciło pusty wynik, mimo że obie poprawne próbki kontrolne dały tekst.

Kto powinien z tego korzystać, a kto nie

Rozważ newspaper4k, jeśli priorytetem jest: zwracać niepusty tekst na kontrolowanym korpusie nastawionym na artykuły, minimalizować oznaczony boilerplate w tym korpusie i zaakceptować wolniejszy zimny import. Przy takim jasno zdefiniowanym kryterium prowadził w tym porównaniu. Inne kryteria mogą wybrać Readability dla maksymalnego zachowania ocenianej treści albo resiliparse dla szybkości startu i mediany ekstrakcji.

Pomiń go albo przetestuj bardzo dokładnie, jeśli najważniejszy jest cold start, jeśli 47,5 MiB zmierzonych site-packages to istotny koszt albo jeśli liczy się odzyskiwanie po uszkodzonym HTML. Resiliparse uruchamiał się tu 187× szybciej, ale nie zrównał się z trafilatura we wszystkich kolumnach jakości: trafilatura miała wyższy recall artykułu, a ich profile wycieków i precyzji również się różniły. newspaper4k jest ukierunkowany na artykuły; list produktów i dashboardów nie testowano, więc nie deklarujemy tu żadnego zachowania dla takich przypadków.

Cokolwiek zrobisz, ustaw honor_robotstxt, jeśli pozwalasz bibliotece pobierać dane. To nie jest uwaga o wydajności.

Gdzie pasuje zarządzane API

newspaper4k potrafi parsować HTML dostarczony przez wywołującego i ma też ścieżki pobierania. Zarządzana usługa ekstrakcji przenosi pobieranie, renderowanie i pracę nad schematem za granicę dostawcy. Tworzymy Thunderbit, ale nie był on uruchamiany na tym zestawie próbek, więc ten przegląd nie daje podstaw do porównania jakości, renderowania, ochrony przed botami, opóźnień ani kosztów. Dla przechowywanego HTML artykułu przedstawione tu dowody dotyczą wyłącznie newspaper4k; cele niebędące artykułami wymagają własnej oceny.

Dla tych samych próbek przez wszystkie sześć ekstraktorów zobacz porównanie ekstrakcji w sześciu bibliotekach.

W przypadku rozwiązań hostowanych szerszy obraz daje nasz przegląd API do web scrapingu; dla alternatyw self-hosted — przewodnik po open-source scraperach. Jeśli tekst ma trafić do modelu, konwersja HTML do Markdown w Pythonie pokazuje, gdzie traci się wierność.

Wypróbuj Thunderbit do ekstrakcji danych z sieci

Czy warto używać newspaper4k?

Traktuj newspaper4k jako mocnego kandydata do ekstrakcji tekstu artykułów, gdy HTML jest już dostępny, a następnie zrób realny test porównawczy na własnym korpusie przed wdrożeniem. Zestaw kontrolowany potwierdza wysoki recall artykułu, brak oznaczonego boilerplate i niepusty wynik dla wszystkich 22 próbek artykułowych. Nie obejmuje jednak prawdziwych stron ani dokładności metadanych, a 10 z 12 uszkodzonych próbek zwróciło pusty wynik.

Jeśli korzystasz ze ścieżki pobierania, przejrzyj jawnie honor_robotstxt=False, dziesięciowątkową równoległość i limity per host. Jeśli cold start lub rozmiar zależności ma znaczenie, zmierz lokalny import trwający 2,812 s i obserwację 47,5 MiB site-packages w swojej infrastrukturze, zamiast traktować je jak uniwersalny koszt kontenera.

Wypróbuj Thunderbit do ekstrakcji danych z sieci Get Started Free

FAQ

Dlaczego set_html() nie działa? Bo w newspaper4k taka metoda nie istnieje. HTML przekazuje się przez download(input_html=html), a potem wywołuje parse(). Wyniki wyszukiwania mogą pokazywać przykłady dla newspaper3k, więc łatwo o pomyłkę; ja popełniłem ją przy pierwszym uruchomieniu i poprawiłem test przed oceną.

Czy newspaper4k respektuje robots.txt? Nie domyślnie. honor_robotstxt jest dostarczane jako False. Ustaw je na True w Configuration, jeśli pozwalasz bibliotece pobierać dane, albo przekaż input_html i pobieraj samodzielnie. Obsługa wielu artykułów domyślnie używa też dziesięciu wątków. To nie jest ustalona szybkość requestów, tylko niekontrolowana równoległość; ustaw jawne limity per host.

Czy parse() wykonuje żądania sieciowe? W newspaper4k 0.9.6 testowana ścieżka download(input_html=…) + parse() nie podjęła żadnej próby połączenia dla jednego wejścia HTML, gdy socket.connect był zablokowany. Nie oznacza to, że każda konfiguracja parsera, wtyczka, typ treści czy przyszłe wydanie będą wolne od sieci.

Co oznacza ostrzeżenie o NLTK przy imporcie? Podstawowa instalacja nie zawiera NLTK, więc ekstrakcja słów kluczowych i streszczeń jest niedostępna, a biblioteka informuje o tym przy imporcie. Sama ekstrakcja działa bez zmian — wszystko mierzone tutaj uruchomiono na podstawowej instalacji. pip install 'newspaper4k[nlp]' dodaje te funkcje wraz z cięższym drzewem zależności i pobieraniem korpusów.

Czego ten przegląd nie testował? Prawdziwych stron — to kontrolowane próbki z oznaczonymi jednostkami. Pola metadanych były zinwentaryzowane, ale nie oceniano dokładności tytułu, autora, daty ani obrazów. Nie testowano też ekstrakcji wielojęzycznej, dodatków NLP, wielowątkowego crawlownia źródeł ani przepustowości pod obciążeniem. Szczytowe zużycie pamięci procesu zmierzono na jednym wejściu HTML o rozmiarze 226 KB i jednym o rozmiarze 10 MB, a nie przy równoległości czy trwałym obciążeniu.

Ke
Ke
CTO w Thunderbit | Starszy data scientist i ekspert ML Dzięki prawie dziesięciu latom doświadczenia w uczeniu maszynowym i data science, Ke Shen jest absolwentem Columbia University i byłym starszym data scientistą w Walmart Labs. Dysponując dogłębną, uznaną przez branżowych ekspertów wiedzą w zakresie Python, R, Java i statystyki, dzieli się sprawdzonymi w boju spostrzeżeniami na temat wdrażania złożonych algorytmów AI — od teorii po architekturę gotową do produkcji.
Spis treści
Thunderbit · Agent AI do danych z internetu

Wyciągaj dane z dowolnej strony w 1 klik

Zaufało nam ponad 250 000 użytkowników
dostępny darmowy plan
Od strony do arkusza kalkulacyjnego
Opisz, czego potrzebujesz — Agent AI Thunderbit zbierze to i wyeksportuje do Excela, Google Sheets, Airtable lub Notion. Start jest darmowy.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week