extractus / article-extractor

To extract main article from given URL with Node.js
https://extractor-demos.pages.dev/article-extractor
MIT License
1.46k stars 132 forks source link

Encoding windows-1250 not properly decoded! #386

Closed martinrotter closed 2 months ago

martinrotter commented 2 months ago

Have sample URL: https://www.idnes.cz/ceske-budejovice/zpravy/chata-deti-hluboka-matka-straznici-myly-potok-ospod-les.A240422_135654_budejovice-zpravy_khr#utm_source=rss&utm_medium=feed&utm_campaign=zpravodaj&utm_content=main

Demo at https://extractor-demos.pages.dev/article-extractor returns content with malformed characters. Czech characters are completely broken.

Also self-deployed latest 8.0.7 version of your SW has the same problem.

Website www.idnes.cz runs its HTML files with this content-type: text/html; charset=windows-1250.

Here is live data returned directly by "extract" method:

{
  url: "https://www.idnes.cz/ceske-budejovice/zpravy/chata-deti-hluboka-matka-straznici-myly-potok-ospod-les.A240422_135654_budejovice-zpravy_khr",
  title: "Popsan� zdi a �p�na. Chatka byla od��znut� od m�sta, o d�tech v n� nikdo nev�d�l",
  description: "Chatka stoj� v lese v katastru Hlubok� nad Vltavou nedaleko �esk�ch Bud�jovic. Vypad�, jako kdyby se m�la brzy rozpadnout. Kolem je les a mal� potok, sem se trojice ve v�ku p�t, sedm a osm let musela chodit...",
  links: [
    "https://www.idnes.cz/ceske-budejovice/zpravy/chata-deti-hluboka-matka-straznici-myly-potok-ospod-les.A240422_135654_budejovice-zpravy_khr",
  ],
  image: "https://1gr.cz/tempimg/fb/2024/4/KHR608bd283a5_hluboka6.jpg",
  content: "<div>\r\n                            <p>Chatka stoj� v lese v katastru Hlubok� nad Vltavou nedaleko �esk�ch Bud�jovic. Vypad�, jako kdyby se m�la brzy rozpadnout. Kolem je les a mal� potok, sem se trojice ve v�ku p�t, sedm a osm let musela chodit um�vat. Na z�chod pak chodila za chatku. Asi t�i sta metr� odtud je �elezni�n� stanice, jinak je m�sto opu�t�n� a prakticky nikdo v bl�zk�m okol� ne�ije.</p><p>Mal� d�ti tu ale musely v ned�stojn�ch podm�nk�ch str�vit n�kolik t�dn�, ne� je trochu n�hodou odhalili str�n�ci z Hlubok� nad Vltavou. Nechodily do �koly ani do �kolky, �ivo�ily. Matka je zanedb�vala.</p><p>V�e za�alo b�n�m ozn�men�m 27. b�ezna, kdy m�stskou policii zavolala vedouc� prodejny, na kterou m�li po�v�vat t�i lid�, kte�� sed�li p�ed obchodem. �Po p��jezdu na m�sto tam byli u� jen dva. Znali jsme je, v minulosti se pot�kali s drogovou z�vislost� a tak� kr�de�emi,� uvedl Patrik Bro�ek, z�stupce vrchn�ho str�n�ka.</p><p>O p��padu m�stsk� policie z Hlubok� informovala o uplynul�m v�kendu na sv�ch facebookov�ch str�nk�ch. Ne� p�ijeli str�n�ci po zavol�n� na m�sto, t�et� �lov�k od obchodu mezit�m zmizel a schov�val se za rohem supermarketu. Pozd�ji se poda�ilo odhalit, �e to byla pr�v� matka t�� nezletil�ch.</p><p>Str�n�ci zjistili, �e v�ichni �dajn� p�eb�vaj� v n�jak� chatce. Podle m�stn� znalosti si jeden z nich vzpomn�l, �e kdysi d�vno �e�il jednoho mu�e bez domova v chatce v lese za vlakov�m n�dra��m U Sud�rny.</p><p>�Rozhodli jsme se tedy toto m�sto zkontrolovat. Po p��chodu k chatce jsme vid�li, �e se tam nach�zej� t�i d�ti. Ani nev�d�ly, kdy byly naposledy ve �kolce a ve �kole nebo co je to �i�t�n� zub�. D�ti n�m tak� �ekly, �e se chod� m�t do potoka pobl� a na WC chod� za chatku,� popsal ot�esn� podm�nky Bro�ek.</p><p>Str�n�ci proto nev�hali a rychle p�ivolali policii a soci�ln� pracovn�ky z OSPODu (Org�n soci�ln�-pr�vn� ochrany d�t�). �D�ti byly hladov�, �ekly n�m, �e jedly naposledy v 11 hodin r�no chleba, kdy� jejich matka ode�la do m�sta. V za�pin�n� chatr�i s nimi byl je�t� jeden dosp�l� �lov�k, kter� je hl�dal,� uvedl d�le str�n�k.</p><p>V nuzn�ch podm�nk�ch d�ti p�eb�valy asi dva t�dny. �Podle osoby, kter� je v chatce hl�dala, v�echny vyhodil otec d�t� z bytu,� doplnil Bro�ek.</p><p>T�m�� jist� to podle n�j nebyli m�stn� ani lid� z okol�. Matka se ale nejsp� znala s n�kterou z osob, kter� v chatce tak� p�eb�vala. �Nen� to tak, �e by v t� chatce n�kdo dlouhodob� �il. V minulosti ano, ale to bylo u� p�ed n�kolika lety,� konstatoval str�n�k.</p><h3 id=\"--matka-s-detmi-nebyly-mistni\">Matka s d�tmi nebyly m�stn�</h3><p>Str�n�ci pozd�ji zjistili, �e matkou zanedban�ch d�t� je �ena, kter� se schov�vala za supermarketem. Ta se k chatce nedostavila ani pot�, co ji str�n�ci telefonicky kontaktovali, p�esto�e jim odpov�d�la, �e p�ijde do p�l hodiny. ��dajn� u� j� takto odebrali 10 d�t�,� doplnila m�stsk� policie z Hlubok� nad Vltavou.</p><p>Celkem tedy v chatce p�eb�valo sedm lid�, �ty�i dosp�l� a t�i d�ti. Soci�ln� pracovnice nezletil� vzaly a odvezly je na vy�et�en� do �eskobud�jovick� nemocnice a pot� je um�stily do d�tsk�ho domova.</p><p>M�sto v pond�l� dopoledne nav�t�vil i redaktor MF DNES, chatka byla v tu chv�li opu�t�n�. A proto�e matka s d�tmi nebyly m�stn�, tak o nich krom� str�n�k� vlastn� nikdo nic nev�d�l. Nen� ani z�ejm�, odkud poch�zela a jak moc se s d�tmi p�esouvala.</p><p>MF DNES oslovila tak� zam�stnance OSPODu, Policie �R a z�stupce magistr�tu m�sta �esk� Bud�jovice, pod kter� soci�ln� pracovn�ci spadaj�. Nikdo z nich se ale s ohledem na n�zk� v�k nezletil�ch nemohl vyjad�ovat.</p><p>�S ohledem na ml�enlivost, kterou n�m ukl�d� z�kon, nem��eme odpov�dat na konkr�tn� zaslan� ot�zky,� reagoval mluv�� bud�jovick� radnice Petr Lama�. �P��pad jsme prov��ovali, nenaplnila se skutkov� podstata protipr�vn�ho jedn�n�, tak�e se nyn� v�c� zab�v� OSPOD,� nav�zal jiho�esk� policejn� mluv�� Milan Bajcura.</p><div><p><a target=\"_blank\" href=\"http://mapy.idnes.cz/#pos=49.0443679421366P14.4183986934694P13&amp;ma=49.035337421222,14.4162100109133,red:\"><img src=\"https://1gr.cz/data/mapy/C7/49_044367942136624-14_41839869346941-13-560x315.png\" alt=\"\" /><span></span></a><a target=\"_blank\" href=\"https://www.shocart.cz/\"></a></p><p><span>Mapy poskytuje © SHOCart a p�isp�vatel� OpenStreetMap. Spole�nost SHOCart je tradi�n� vydavatel turistick�ch a cykloturistick�ch map a atlas�. V�ce na </span><a href=\"http://www.shocart.cz/\" target=\"_blank\">www.shocart.cz</a></p></div>\r\n                        </div>",
  author: "iDNES.cz",
  favicon: "https://1gr.cz/u/favicon/idnes.ico",
  source: "idnes.cz",
  published: "2024-04-22T11:14:00",
  ttr: 122,
  type: "article",
}
martinrotter commented 2 months ago

Btw, the issue can be fixed with using node-fetch and https://www.npmjs.com/package/fetch-charset-detection

ndaidong commented 2 months ago

@martinrotter thanks for your notice & suggestion, let me see if we can use that lib to resolve this issue.

martinrotter commented 2 months ago

How I solved it.

https://github.com/martinrotter/rssguard/blob/master/resources/scripts/article-extractor/extract-article.mjs

ndaidong commented 2 months ago

@martinrotter your example helps me a lot. I've also checked how fetch-charset-detection and its main dependency iconv-lite work. Then I found that we don't need them at all. What we should do is detect the charset (from response header or meta tag), and then use native TextDecoder to decode the content. Something like below should work as expected:

import { extractFromHtml  } from '@extractus/article-extractor'
const url = 'https://www.idnes.cz/ceske-budejovice/zpravy/chata-deti-hluboka-matka-straznici-myly-potok-ospod-les.A240422_135654_budejovice-zpravy_khr'

const res = await fetch(url);
const buffer = await res.arrayBuffer()
const decoder = new TextDecoder('windows-1250')
const html = decoder.decode(buffer)
const article = await extractFromHtml(html, url);

console.log(article)

Screenshot from 2024-04-26 09-27-50

I'm trying to improve the logic here.