Program pro stažení celého webu

Honza1

Program pro stažení celého webu
« kdy: 25. 01. 2015, 20:17:10 »
Zdravím

Jaký program používáte v Linuxu pro web reap (kompletní stáhnutí obsahu webowého serveru + konvert odkazů pro offline prohlížení), a jaké s tím máte zkušenosti ?

V linuxu používam Wget. Je rychlý a výkonný, nezatěžuje moc CPU a poradí si z většinou typů stránek (html, php, atd.).

Pro stáhnutí souboru stačí "wget URL" (URL je možné měnit podle proměnných).
Pro import url ze souboru wget -i soubor.txt ...+další příkazy pro optimalizaci za jménem souboru.
-nc nestahuje soubory, které již jsou staženy (kompletnost souborů netestuje, pokud volba -nc není, a soubor již existuje, nový soubor dostane pořadové číslo za příponu).
-r -l (číslo) stahuje do hloubky určené číslem (-r -l 5 tedy 5 odkazů hluboko - maximální houbka pokud tak hluboo existují odkazy, -N znamená nekonečně hluboko), když tam dáme vysoké číslo (9999), stáhne se většinou celý web.
-nH nevytvoří adresář se jménem serveru
-k konvert odkazů nna stráknách pro offline prohlížení
-np stahuje v adresářové struktuře jen hloubš než aktuální link
-X když nějakou část webu nechceme např. kvůli velikosti nebo doby stahování  např www.web.cz/forum/, pak použijeme -X /forum/ bez jména webu. Lze použít i víc adresářů oddělených čárkou, např. -X /forum/,/cgi/,/kalendar/
-m stáhne celý web kompletně (zde nefunguje -nc, proto spíšpoužívam -r -l 9999)
-A +přípona seznam přípon souborů, které chceme, odddělené čárkou. U připon i jmen souborů jsou v Linuxu rozlišována velká a malá písmena.
-R + přípona seznam přípon souborů, které nechceme, odddělené čárkou.
-r timestamp u souborů (statických) shodných s timestamp na serveru (což je i bez této volby, když se odkazy nekonvertujou -k)
-q nevypisuje průběh stahování na obrazovku (u rekurzivního stahování a velkých souborů je tento výpis hodně dlouhý).

Mšla by jít i možnost vytvoři mapu odkazů bez importu webu na disk, ale nejsem si jistý jak (zdrojový kód stránky se stáhne a procesuje v ram).
Celkem je cca 100 možností pro optimalizaci příkazu wget.

wget -qO - ,důležitá volba, způsobí, že obsah stránky (tedy text - zdrojový kód) se neuloží jako soubor, ale vypíše se na obrazovku (místo výpisu na obrazovku předpokádáme přesměrování k dalšímu zpracování).

Více na www.cetoraz.info/pavel/index.shtml?show=1355,wget---stahujme-kvalitne---Podrobny-navod-s-priklady

Problém ale je ve jménech souborů v případě složitějších názvů se jména vs. odkazy rozhážou. Samozřejmě wget používá názvy souborů shodující se s linuxovými pravidly - ve windows nemusí jít soubory přečíst.

Pro reap  a konvert odkazů složitějších webů je tedy wget spíš těžko použitelný.

Máte zkušenosti s nějakým jiným programem, který by uměl lépe reap-nout web a překonvertovat složitější odkazy ?

Dalším problémem  jsou rozsáhlé databáze, např. fóra, články + comment, kde se všechny stránky generované z databáze ukládají do jednoto adresáře. S různou volbou parametrů je stránek opravdu hodně, zabírají dost místa. Největším problémem ale je více souborů (50 000 - 1 000 000+) v jednom adresáři, navíc s dlouhými názvy. Číst i zapisovat do takového adresáře je docela problém.
Existuje varianta, která by s tímto lépe pracovala v případě reapu fóra nebo článků ? Nejlepším řešením by bylo ukládat do jednoho souboru získaná data místo ukládání každého souboru co by vygenerované stránky zvlášť. Popřípadě zd-ali nějaký program umí obsah web serveru do jednoho soubru uložit ? (Řešením je reap webu + vytvoření iso ze složky pomocí např. ImgBurn, ale tam je problém z delšími názvy a velkým počtem souborů v adresáři ještě větší).

Ve windows se k podobnému účelu dá použít freeware: Black Widow, WebReaper, Backstreet Browser, Jdownloader, Wget for win. Z ne freeware programů Teleport, ale má omezení na celkový počet odkazů podle verze (Pro 65 000, Ultra 256 000 a VLX 40 000 000 - takže VLX prakticky bez omezení, na každý milion adres je potřeba cca 100-250 MB ram).  Teleport má výkon skutečně největší a jako jediný si umí poradit se všemi typy stránek prakticky. Vemi dobře zvládá konvert odkazů a pojmenování souborů u složitých webů. Neduhem většiny programů je opět velký počet souborů v jednom adresáři u fór a databází. Navíc jsou 32-bit, takže když velikost v ram (způsobený nárůst rozsáhným seznamem odkazů) přesáhne 2GB, program spadne. Málokdy existuje verze 64-bit. Freewere programy s špatým výkonem GetLeft a Jobo, ne-freeware Frontpage u office XP a níž (zvádá jen základní typ statických stránek a ukládá zbytečné soubory navíc, takže tato funkce frontpage je k ničemu dneska).
« Poslední změna: 25. 01. 2015, 21:14:30 od Petr Krčmář »


#

Re:Program pro stažení celého webu
« Odpověď #1 kdy: 25. 01. 2015, 21:51:03 »
http://www.httrack.com/ ma jak gui tak lze z cmd, na danej ucel je vhodnejsi nez wget, lze nastavit do kolika urovni stahovat externi odkazy a podobne ...

hm

Re:Program pro stažení celého webu
« Odpověď #2 kdy: 25. 01. 2015, 22:03:55 »
z principu javascriptu nemozne. jednodussi dynamicke odkazy z udalosti snad. slozitejsi podminene dynamicke odkazy na to uz to bude chtit absurdne slozitou heurestiku a dynamicke odkazy z pluginu no to uz vubec. kazdopadne neznam nic nez si napsat vlastni logiku co bude pouzivat webkit. s tim je to celkem hracka do 100 radku na ty zakladni operace.

Honza1

Re:Program pro stažení celého webu
« Odpověď #3 kdy: 25. 01. 2015, 22:39:10 »
hm

Teď jsem nepochopil co vlastně je nemožné už z principu javaskriptu.
Ukládání do jednoho souboru ? Možná každou stránku po stáhnutí připsat k velkému souboru. Nebo udělat ram mopu serveru (to moc programů neumí bez ukládání stránek na disk) a pak teprv stáhnout vlastní obsah.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Program pro stažení celého webu
« Odpověď #4 kdy: 25. 01. 2015, 22:54:09 »
http://www.httrack.com/ ma jak gui tak lze z cmd, na danej ucel je vhodnejsi nez wget, lze nastavit do kolika urovni stahovat externi odkazy a podobne ...

Cim je vhodnejsi, nez wget?


jozin

Re:Program pro stažení celého webu
« Odpověď #5 kdy: 25. 01. 2015, 23:49:42 »
Skoro bych se vsadil, že nic pořádného existovat nebude, protože žádný rozumný programátor nebude vyrábět podobné nesmysly. Správně nastavený webserver tě stejně po první tisícovce requestů zabanuje, takže celý fórum bys stahoval pár měsíců... Když se podobných chytráků najde víc a spustí nad větším webem Teleport, tak slušně zahltí linky i celý stroj. Navíc nechápu, proč z online internetu vyrábět nějaký nekonzistentní otisk. Stahování bude trvat alespoň pár dní u většího webu, takže praktický význam tohoto počínání bude víceméně nula.
Jestli si chceš nějaký stránky přečíst bez internetu, tak existují pluginy do prohlížeče, které vybrané stránky uloží a pak zobrazí i bez přístupu k netu.
Navíc mobilní přípojení stojí pár stovek měsíčně - možná, když místo vymýšlení hranatého kola vezmeš práci do teplých, tak nebudeš muset řešit tyhle myšlenkové veletoče.

Honza1

Re:Program pro stažení celého webu
« Odpověď #6 kdy: 27. 01. 2015, 17:52:59 »
Jozin

Ty jsi taky veletoč a hranaté kolo. Když něco nepoužívš tak do toho nešťourej. Zakázat internety a počítače by jsi třeba náhodou nechtěl ? Ale jak koukam ty se navážíš do ostatních i na dalších vláknech.

Účelem založení vlákna bylo sepsání mých skušeností na dané téma, co nejde co jde, a jaké to má komplikace a pod. + jaké s tím mají zkušenosti ostatní. Když s danou věcí žádné zušenosti nemáš, tak nerejpej, taky nereaguji na témata co mi nic neřííkají.

Dzavy

Re:Program pro stažení celého webu
« Odpověď #7 kdy: 28. 01. 2015, 00:26:24 »
S tím javascriptem jsi to jaksi nepochopil - jde o to, že spousta stránek je dynamicky generovaných pomocí javascriptu/ajaxu, např. facebook, a bez spuštění javascriptu stejně jako by to udělal browser+člověk se k tomu obsahu prostě nedostaneš a automatizace rozhodně není triviální - např. dynamické načítání obsahu stránky při rolování dolů wgetem nasimuluješ jak?

Předpokládám se jedná o rešerši ohledně nástupce Hlodače nebo podobně "zajímavýho" projektu ;)

Honza1

Re:Program pro stažení celého webu
« Odpověď #8 kdy: 28. 01. 2015, 01:01:57 »
Dzavy

Jo tak si to myslel. Rolování stránky, vyplňování formuláře nebo zvolení parametrů v java aplikaci, no prostě java celkově, to je pro wget, nebo který koliv jiný reaper prakticky konečná. Java tímto prostě nejde.

Navíc zrovna u FB, co jsi zmínil jako příkad, když pustíš nějaký stahovač, tak tam je tak obrovské množství odkazů, že se strom odkazů zachvilku rozroste  RAM a přesáhne velikostí mez, nebo dojde místo na disku (ono každá stránka má řekněme 100-200 kB a strom se bude rychle větvit). Ještě dřív stejně nastane problém v tom že všechny soubory jsou v jednom adresáři a přístup se začne razantně zpomalovat. FB reap je nesmysl zůsobem stáhni všechny odkazy.

Jinak javu a tyhle věci vůbec  neberu v potaz, java rozcestí zvládá možná teleport a jen jednoduché věci. Jen klasicé kliknutí (stránka se generuje pomocí www adresy). Ono i takové fórumn tady i jinde je zrovna příklad, kdy se stráka generuje pomocí zvolené adresy, ale jde na to kliknout. Zvládají to ale jen některé stahovače. Nejjednodušší jsou samozdřejmě statické html s jednoduchým odkazem + obrázky. Větší web (hlavně typ fóra, články, galerie) docela dlouho trvá a problém všechny soubory v jednom adresáři je značný. Stránky jsou podobné, jen trocha textu se mění. Proto po kompresi se razantně zmenší.

Obrázková galerie nebo tzv. kalendář akcí - to je problém z velkým množstvím možností jak postavit odkaz (a může reap trvat neskutečně dloho a stáhnou obrovské množství nepotřebného html a zase soubory v jednom adresáři, malé galerie ještě jdou). V takovém případě je k wget lepší použít utility grep, sed, gavk, stránku postnout pomocí wget -qO - a pajpy. Tímto se dá vyreapovat např. obsah ušech alb uživatele na rajčeti (a to obvykle během 1-10 min a fotky setříděny do alb). Jinou věcí jsou různé dynamické stránky kde víš jak se mění proměnná. Budeš do adresy dosazovat proměnné a stránky stahovat do adresářů dle proměnných a stáhlou htlm vždy přejmenuješ ve skriptu). No prostě hrubá síla, tedy download všech odkazů je docela problém.

Co nevím jak udělat je reap ne každou stránku ukládat zvlášť ale do jednoho souboru víc stránek (vč. konvertu odkazů).

"Předpokládám se jedná o rešerši ohledně nástupce Hlodače nebo podobně "zajímavýho" projektu" to jsem nepochopil.

Re:Program pro stažení celého webu
« Odpověď #9 kdy: 28. 01. 2015, 11:08:12 »
Zajímavé téma, osobně používám wget s parametry -E -H -k -p -nd --no-check-certificate --content-on-error. Vždy na jednu konkrétní URL. Na stažení celého webu (mirror) je potřeba si pohrát s parametrem -m (případně -r -l). Někdy je také vhodné získat seznam URL ze xmlsitemapy (pokud ji web má, tak je to lepší jak mirror přes parsing jednotlivých html stránek).

Nedělám si iluze o tom že po tomto způsobu uložení všechny stránky půjdou pohodlně přečíst. Ale min text se z toho vytáhne vždy. A to je to nejdůležitější.

Ještě vysvětlení PROČ pro lidi jako Jozin. Není to vůbec o tom, že připojení k netu dneska může mít člověk za pár korun. Je to o tom, že informace z webu prostě mizí. Zajímavé stránky, které dnes existují, zítra už mohou zmizet. A webové archivy také nezachytí všechno. Nevím, zda ještě někdo používáte bookmarky v prohlížečích, já ne, protože po roce už polovina odkazů stejně nefunguje. Místo bookmarků si tu stránku raději rovnou stáhnu offline.

Dál, mám to napojené na TTRSS, takže se mi automaticky stahují články z RSS zdrojů. Důvod není ani tak to, že bych chtěl mít všechno z RSS uložené, důvod je to, že se velmi často obsah článku změní v čase (a redakce se ještě tváří, že takto vypadal článek od počátku).

Dzavy

Re:Program pro stažení celého webu
« Odpověď #10 kdy: 28. 01. 2015, 11:29:51 »
Honza1 - Hlodac viz http://milionovastranka.net/. A Java vs. JavaScript je docela rozdil.

Tomáš Crhonek: Ciste pro zajimavost, pouzivas porovnavani ruznych verzi clanku profesionalne (tj. jako zpravodajska agentura nebo monitoring zpravodajstvi aj. - neco ve stylu http://www.newtonmedia.cz/) nebo jenom jako duvod pro nasledny trolling v diskuzi a nadavani na redakci?

Re:Program pro stažení celého webu
« Odpověď #11 kdy: 28. 01. 2015, 11:39:54 »
Tomáš Crhonek: Ciste pro zajimavost, pouzivas porovnavani ruznych verzi clanku profesionalne (tj. jako zpravodajska agentura nebo monitoring zpravodajstvi aj. - neco ve stylu http://www.newtonmedia.cz/) nebo jenom jako duvod pro nasledny trolling v diskuzi a nadavani na redakci?

Ani jedno.  ;-)

Jen si tak udělám obrázek o práci redakce, který nikomu nevnucuji. Většinou je to důvod proč daný web přestat sledovat.

Původní účel pro který toto vzniklo byla archivace mého vlastního webu v čase. Ono to člověku nepřijde, protože ten svůj web má pořád před očima a dělá jen malé změny. Potom jsem se mrknul na různé webarchivy jak vypadal před 10 lety a zjistil jsem, že už si to ani nepamatuju. :D Tak jsem si napsal bastlskript, který ne/pravidelně dělá mirror. No a potom jsem ho rozšířil o ttrss na offline ukládání webů mého zájmu (tady se ale článek stáhne pouze jednou, takže pokud mám podezření, že se článek změnil, mám pouze jednu verzi tak, jak vypadal těsně po uveřejnění v rss feedu a aktální stav). Rozhodně nemám zájem dělat druhý archiv.org.

OMG

Re:Program pro stažení celého webu
« Odpověď #12 kdy: 28. 01. 2015, 13:06:20 »
...
se článek změnil, mám pouze jednu verzi tak, jak vypadal těsně po uveřejnění v rss feedu a aktální stav). Rozhodně nemám zájem dělat druhý archiv.org.
Tomasi, jak to ukladas? Mas nejakou repository? Nebo proste mas ve svem home 100gb archivu? Zajima me velikost a typ dat.

Re:Program pro stažení celého webu
« Odpověď #13 kdy: 28. 01. 2015, 13:14:30 »
...
se článek změnil, mám pouze jednu verzi tak, jak vypadal těsně po uveřejnění v rss feedu a aktální stav). Rozhodně nemám zájem dělat druhý archiv.org.
Tomasi, jak to ukladas? Mas nejakou repository? Nebo proste mas ve svem home 100gb archivu? Zajima me velikost a typ dat.

Proženu to tarem, gzipem a jako bytea to vrazím do Postgresu. Aktuálně něco přes 200 GB. Pochopitelně, takto se tam ukládá hromadu duplicitních souborů (v každém archivu je logo webu, csska apod.), takže se chystám na deduplikaci. Potom by to byl každý soubor jako bytea zvlášť, nekomprimovaný (TOAST se v PG stejně komprimuje přes lza). Vlastně taková jednoduchá implementace fs v sql. (S deduplikací a transparentní kompresí.)

Honza1

Re:Program pro stažení celého webu
« Odpověď #14 kdy: 28. 01. 2015, 16:59:55 »
Tomáš C.

-nd znamená všechny soubory v jednom adresáři, takže se jesště situace toho co viím jako problém zhorší. -m znamená -r -l inf(nekonečno) -N(stejná timstamp jako na serveru). Ale při příkazu -m nejde použít -nc (vynechá již stažené soubory).

Stránky samozřejmě nevypadají tak jako v původní podobě ale text a základní vzhed a většinou i fungující odkazy, o to tam jde, to zůstává. Někdy je otřeba stíhnout jen html text. U některých stránek (hlavně fóra) jsou obrázky často z externíchwebů a nestahujou se. Volba  -p znamená, že se stránka stáhne se všemi soubory požebnými k zobrazení.

A jak si psal prů Jožina důvody - přesně tak, stránka často může z webu zmizet a to kdykoliv. Pravdu je, že  někdo dost rád takto hromadí data. Zvláště, je li obsah tak trochu kontroverzní. Nebo máš na urřitou dobu placený přístup někam (User+Heslo) a ten ti vyprší. Nebo tě daná stránka poškozuje a archivuješ si důkazní materiál. U některých stránek se často mění obsah (dostupný je aktuální stav), tak použioješ Cron a stránky ukládáš průběžně. Dá se to použít pro pozdější analýzu dat. Nebo pro práci z daty - s uloženými stránkami na disku to je mnohonásobně rzchlejší a nemusíš posílat řeba i miliony requestů na server. A nebo se stránka na webu vždz pomalu načítá, tak si uděláš kopii a stránka se vždz po kliknutí zobrazí okamžitě místo např. 20 s. Konec konců www.truecrypt.org - škoda že jsem nestahoval web průběžně.

Tomáš, OMG

Na kompresi právě html stránek je dobrý 7zip (p7zip). Většina stránek jsou dost podobné soubory a právě 7zip umí mezisouborové podobnosti velmi dobře. O duplicitních obrázcích tzpu ikony ani nemluvím, na to je 7zip nejlepší. Podobnosti nehledá totiž v rámci jednohosoubory ale v rámci velikosti slovníku (až 1024 MB) a při kompresi postupuje podle seznamu souborů, který je roztříden nejdřív podle přípony, pak podle názvu. Při maximální velikosti slovníku potřebuješ 10,5 GiB Ram + nějaká ram pro seznam souborů (cca 1 GB pro každý milion souborů), takže celkem potřebuješ 11-15 GiB (v extrémním případě i 20 GiB ram volné pro 7zip přimaximální velikosti slovníku). Dost z paměti čte při procesu a swapování je silně neefektivní. A vzhledem k uvedenému tarovat soubory před kompresí 7z může výslednou kompresi i zhoršit.

Dzavy
Java a JavaSkript je samozřejmě rozdíl. Ale jak jsem psal, problém je hlavně s Javou (prakticky neřešitelný). Problém lze zaznamenat např. na tomto malém webu http://www.kesyl.unas.cz/pocasi-kunovice/statistics.htm

Časově i datově jde o náročnou věc, vyhledávače musí mít silný výkon. tejně jako programy pro dohalování opsaných prací.