Ich suche einen Webseiten-Downloader der unter Linux läuft, der auch mit dynamischen Seiten klar kommt – er müsste also js-Skripte ausführen können.
Seiten mit JS wird schwierig - dafür brauchst du einen ausgewachsenen Browser. Und was soll der dann speichern? Einen Screenshot?
:
Bearbeitet durch User
Man kann Chromium headless starten und die damit gerenderte Seite speichern.
Nicht mehr ganz aktuell, aber einen Versuch wäre es wert: https://www.httrack.com/page/2/en/index.html
Foobar schrieb: > Und was soll der dann speichern? Einen Screenshot? Nein, es soll eine Kopie der gesamten Website heruntergeladen werden – in html. Jack V. schrieb: > Man kann Chromium headless starten und die damit gerenderte Seite > speichern. Das dürfte so ziemlich jeder Browser können – nur muss dann ein Sklave vor dem Bildschirm sitzen, der das tut, was ich gerne automatisieren würde. Achim K. schrieb: > https://www.httrack.com/page/2/en/index.html Das Teil habe ich probiert – es kann es definitiv nicht. Vermutlich müsste das, was ich suche, irgend eine NodeJS-Geschichte sein.
Moriz schrieb: > Das dürfte so ziemlich jeder Browser können – nur muss dann ein Sklave > vor dem Bildschirm sitzen, der das tut, was ich gerne automatisieren > würde. Ich schrieb bewusst „headless“ – es lässt sich prima scripten. Kilo S. schrieb: > wget -mpEk "url" Seit wann führt wget JS aus?
:
Bearbeitet durch User
>> Und was soll der dann speichern? Einen Screenshot? > > Nein, es soll eine Kopie der gesamten Website heruntergeladen werden – > in html. Das würde nur in trivialen Ausnahmefällen funktionieren. Dynamische Webseiten sind ein verteiltes Programm: ein Teil läuft im Browser, der Rest auf einem oder mehreren Servern. Du bekommst nur den Browser-Teil. Wie soll z.B. eine der z.Zt. beliebten "endlos scrollenden Seiten" abgespeichert werden? Dazu kommt noch, dass viele Serverbetreiber das automatische Abgrasen ihrer Seiten nicht mögen und deshalb Captchas einsetzen oder z.B. Cloudflare vorschalten. Für einige Seiten gibt es spezielle Scraper (z.B. für youtube). Um welche Seite geht es denn?
Moriz schrieb: > Ich suche einen Webseiten-Downloader der unter Linux läuft, der auch mit > dynamischen Seiten klar kommt – er müsste also js-Skripte ausführen > können. Und was macht man mit Seiten die dynamisch Daten von einem Backend bekommen? Und wieso sollte der Downloader js Skripte ausführen? Das macht nach wie vor der Browser. Der Downloader muss nur alle Skripte runterladen.
:
Bearbeitet durch User
Achim K. schrieb: > Nicht mehr ganz aktuell, aber einen Versuch wäre es wert: > https://www.httrack.com/page/2/en/index.html Funktioniert aber mM. immer noch am besten. Das Projekt wird scheinbar nach längerer Pause wieder weitergeführt, und findet sich jetzt aber auf https://github.com/xroche/httrack. Muß man sich aber selbst zusammenbauen, und läuft mW. derzeit nur unter Linux, bzw. ohne GUI nur als Kommandozeilentool. Aber soviel mehr kann es wohl zumindest bei meinen Tests auch nicht. Alternativ wäre noch Cyotek Webcopy zu erwähnen, was vergleichbar mit HTrack ist. Was das eine nicht kann, kann vielleicht das andere ... (gibts aber, wenn ich mich noch recht erinnere, nur für Windows, lief aber bei meinen Tests auch unter wine).
Moriz schrieb: > Ich suche einen Webseiten-Downloader der unter Linux läuft, der auch mit > dynamischen Seiten klar kommt – er müsste also js-Skripte ausführen > können. Es kann da keinen universellen Downloader geben. Mit der JS-Kacke (allgemeiner: mit allen aktiven Inhalten) hat man die Kontrolle über seinen Rechner weitgehend verloren. Schützen kann man sich nur dadurch, dass man aktive Inhalte eben nicht ausführt. Was aber natürlich inzwischen dazu führt, dass man auch die wenigen echten Inhalte vieler Webseiten kaum noch rauspicken kann. Die am Besten funktionierende Möglichkeit, die ich kenne, ist der "ferngesteuerte Browser". Aber man muß natürlich die "Steuerung" an jede konkrete Site anpassen. Und wenn man damit fertig ist, ändert der Gegner wieder was und man fängt von vorn an... Wie soll ein relativ doofer und unflexibler Downloader das leisten können? Aber egal, das alles ist nur ein Zwischenspiel. Fast überall muss man sich inzwischen in irgendeiner Form anmelden. Es ist absehbar, dass es praktisch durchgängige Praxis wird, das Websites ohne Anmeldung überhaupt keine Information mehr rausrücken. So wie es heute schon viele gibt, die ohne aktives JS nicht mal mehr eine Fehlermeldung liefern, sondern nur noch eine vollkommen leere Seite.
Foobar schrieb: > Dynamische Webseiten sind ein verteiltes Programm: ein Teil läuft im > Browser, der Rest auf einem oder mehreren Servern. Ähnlich bei Downloads. Bei mir sind sie außerhalb des Document-Root-Verzeichnisses gespeichert, da kommt man per HTML (Direktlinks) nicht ran. Aber wozu braucht man fremde Webauftritte als Offlineversion?
René H. schrieb: > Aber wozu braucht man fremde Webauftritte als Offlineversion? Zum Archivieren. Ist dir mal aufgefallen, wieviele Seiten von früher™ mit der Zeit verschwunden sind? Ein Problem dabei ist, dass viele heutige Seiten so zusammengeklickt werden, dass sie beispielsweise Bilder erst nachladen, wenn diese angezeigt werden sollen; wenn man also soweit runtergescrollt hat. Wenn man die statische Seite samt Scripten mittels etwa wget oder auch mit der „Seite speichern“-Funktion des Browser lädt, hat man diese Bilder dann nicht, und wenn die ursprüngliche Seite weg ist, bekommt man sie auch nicht. Und wenn die Information in den Bildern wichtig war (Schaltpläne, Anschlussbelegungen, […]), hat man halt nutzlosen Datenmüll. Um die Bilder mitspeichern zu können, müssen die entsprechende Scripte beim Laden der Seite ausgeführt werden.
:
Bearbeitet durch User
Jack V. schrieb: > die Information in den Bildern wichtig war Wenn mir etwas wichtig ist, z.B. ein Schaltplan, dann speichere ich es sofort und direkt.
Du bist halt nicht die Referenz, nach der sich alle Anderen richten.
Foobar schrieb: > Dynamische > Webseiten sind ein verteiltes Programm: ein Teil läuft im Browser, der > Rest auf einem oder mehreren Servern. Du bekommst nur den Browser-Teil. Ich meine Seiten wie www.telepolis.de, die die Links auf Artikel dynamisch erzeugen. Die Linkziele selbst sind dann statisch.
Jens G. schrieb: > Funktioniert aber mM. immer noch am besten. Dann probier mal www.telepolis.de damit herunterzuladen…
Jack V. schrieb: > Ich schrieb bewusst „headless“ – es lässt sich prima scripten. Sorry, das hatte ich überlesen. Ich kann mir allerdings nicht recht vorstellen, wie man es schafft, z.B. www.telepolis.de (in Teilen) herunterzuladen.
René H. schrieb: > Aber wozu braucht man fremde Webauftritte als Offlineversion? Zum Bleistift, um statistische Analysen über die Texte zu machen…
Wenn Du des Englischen mächtig bist, google mal nach "headless chrome crawler".
Moriz schrieb: > www.telepolis.de Warum soll ich das machen. Vollkommen uninteressant für mich, und habe auch nicht geschrieben, daß das mit allem klar kommt.
Jens G. schrieb: > Warum soll ich das machen. Um zu sehen, dass httrack das ganz einfach nicht kann…
Mario M. schrieb: > Wenn Du des Englischen mächtig bist, google mal nach "headless chrome > crawler". Naja, das ist das Konzept des "ferngesteuerten Browsers". Man muß halt die "Fernsteuerung" für jede Website basteln und ständig den Änderungen auf dieser Site anpassen. Das konkret im Thread erwähnte Beispiel Telepolis ist da noch sehr pflegeleicht. Die machen nicht allzu oft was. Kostet schließlich auch auf ihrer Seite Arbeit. Aber wenn plötzlich massenhaft automatische Downloads erfolgen würden, ist natürlich schwerstens zu erwarten, dass sehr schnell was geändert wird. Erst Nadelstiche, dann immer mehr. Gegen einzelne speziell erstellte Downloader machen die nix, weil es ihnen nicht mal auffällt, dass die existieren. Sowas geht einfach im Rauschen der Traffic-Überwachung unter. Sobald aber etwas auch für die Masse der Idioten leicht verfügbares und benutzbares existiert, und das dann auch genutzt wird, fällt das natürlich auf. Und natürlich erfolgen dann die entsprechenden Gegenmaßnahmen. Wie sowas bei wirklich hochdynamisch "besaugten" und "gepflegten" Sites abläuft, kann man z.B. bei YT verfolgen. Da übrigens auch die ersten Ansätze zum Zwangs-Accounting. Und das alles wird so weiter gehen. Der ewige Kampf der Content-Besitzer mit denen, die den Content entgegen der Intentionen der Besitzer (oder vielleicht auch nichtmal entgegen, sondern bloß darüber hinaus) nutzen wollen. Alles nix wirklich Neues.
Moriz schrieb: > Jens G. schrieb: >> Warum soll ich das machen. > > Um zu sehen, dass httrack das ganz einfach nicht kann… Habe ich in der Richtung irgendwas behauptet?
Jens G. schrieb: > Moriz schrieb: >> Jens G. schrieb: >>> Warum soll ich das machen. >> >> Um zu sehen, dass httrack das ganz einfach nicht kann… > > Habe ich in der Richtung irgendwas behauptet? Ach so, du suchst Streit. Darauf kann ich verzichten.
Jack V. schrieb: > Seit wann führt wget JS aus? Irgend wie macht das für mich auch überhaupt keinen Sinn! Wozu soll der Downloader das Script ausführen. Das ist doch clientseitiges Scripting und wird doch erst beim Betrachten der Seite im Browser ausgeführt. Was soll den der Downloader ausführen z.B. auf einer Seite mit Rechenfunktionen in JS? Eher wird doch ein Webserver mit PHP etc. benötigt, wenn die Seiten entsprechenden Code serverseitig ausführen. Beispiel: SELFHTML. Da kann man gleich das ganze Paket inkl. Server runterladen. Ich verwende lokal für mich auf dem Rechner gerne den in PHP eingebauten Mini-Webserver. ciao Marci
Ob S. schrieb: > Fast überall muss man > sich inzwischen in irgendeiner Form anmelden. Zwar ein wenig OT, aber mich nerven viele Foren, bei denen man ohne Anmeldung keinerlei Grafiken, Code etc. anschauen kann. Das ist Mist, und wenn möglich lasse ich solche Sites links liegen. ciao Marci
Marci W. schrieb: > Irgend wie macht das für mich auch überhaupt keinen Sinn! Wozu soll der > Downloader das Script ausführen. Es gibt Seiten, die erzeugen die Links, auf die verwiesen wird, per js auf dem Client. Wenn der Downloader das nicht auflöst – oft per Ajax –, dann kann man mit der heruntergeladenen Seite nicht viel anfangen. Beispiel: www.telepolis.de
:
Bearbeitet durch User
Marci W. schrieb: > Irgend wie macht das für mich auch überhaupt keinen Sinn! Wozu soll der > Downloader das Script ausführen. Das ist doch clientseitiges Scripting > und wird doch erst beim Betrachten der Seite im Browser ausgeführt. > Was soll den der Downloader ausführen z.B. auf einer Seite mit > Rechenfunktionen in JS? Schrieb ich doch recht ausführlich: einige Seiten basieren heute auf Scripten, die dynamisch Sachen genau dann laden und anzeigen, wenn sie im Browser sichtbar werden. Diese Sachen (Bilder, Diagramme, Textboxen, komplette Inhalte, …) fehlen, wenn man plump die Seite lädt, ohne die Scripte auszuführen – weil’s eben diese Scripte sind, die den Inhalt laden, den man sichern möchte. Noch nie ’ne Seite gesehen, die Content nachlädt, wenn man nach unten scrollt? Einfach mal beispielsweise Youtube anschauen und schnell runterscrollen.
:
Bearbeitet durch User
Marci W. schrieb: > Irgend wie macht das für mich auch überhaupt keinen Sinn! Du bist kein Programmierer, stimmt's? > Wozu soll der > Downloader das Script ausführen. Weil er sonst nicht an die Kekse kommt. > Das ist doch clientseitiges Scripting > und wird doch erst beim Betrachten der Seite im Browser ausgeführt. Genau. Aber den Inhalt des Scipts bestimmt der Anbieter der Web-Site, der kann darin im Prinzip fast machen was er will. Jedes JS-Script ist im Prinzip ein "Trojanisches Pferd", das der Anbieter der Website vor dein Tor fährt. Du hast nur die Wahl zu entscheiden, ob du es durch's Tor einlassen willst oder nicht. Wenn du es nicht einlässt, wird die Webseite nicht so aussehen, wie sie es könnte. Weil halt das Script fehlt, was den gewünschten Inhalt erst herunterlädt und in das DOM der angezeigten Seite einfügt. > Eher wird doch ein Webserver mit PHP etc. benötigt, wenn die Seiten > entsprechenden Code serverseitig ausführen. Das gibt es natürlich auch noch. Ist aber derzeit eher nicht so relevant. Aber gerade wieder im Kommen. Warum? U.a.: um es einfachen Downloadern noch schwerer zu machen. Die können nämlich den clientseitigen Code nicht nur ausführen, sondern auch analysieren. Gibt es aber eine (für den Client nicht einsehbare) Softwarekomponente auf dem Server, wird es noch viel schwerer (praktisch fast unmöglich), das Zeug zu analysieren.
Jack V. schrieb: > Noch nie ’ne Seite gesehen, die Content > nachlädt, wenn man nach unten scrollt? Nee, natürlich nicht. ;-) Im Ernst: was soll in Deinem Beispiel der arme Downloader machen? Die Seite/Liste so lange laden, bis nix mehr geht? Das kann dann recht viel Content sein... Ich muss zugeben, mir ist gerade eingefallen, dass ich auch mal so eine Seite hatte mit JS. Und ich gebe zu, ich habe es dann irgend wann sein lassen, das offline zu speichern. War mir zu blöd. Und ich denke, da wird man wohl ums Handanlegen nicht herum kommen, oder? ciao Marci
Ob S. schrieb: > Du bist kein Programmierer, stimmt's? Falsch. Und ohne mich hier outen zu wollen: ich programmiere für meine eigenen Sache sowohl serverseitig als auch clientseitig. ciao Marci
Es gibt auch zig Seiten wo die Inhalte nicht einfach downloadbar sein weil wohl zu geheime Bilder oder Infos meist oben dabei sind, wie z.B. das Logo des Seitentreibers oder das Impressum, da kann man bei manchen das nicht mal kopieren, aber Bilder sind es auch nicht. Der Seitenquelltext gibt aber auch manches Mal zu denken, dort sucht man sich auch den Wolf. Manuelles Runterladen durch Speichern mit dem Browser u. dann gleich offline testen ob alles dabei ist.
Marci W. schrieb: > Im Ernst: was soll in Deinem Beispiel der arme Downloader machen? Das Javascript ausführen und die Seite im Speicher so aufbauen, wie sie vom Browser angezeigt würde und statt sie anzuzeigen, den html-Text in eine Datei schreiben…
Moriz schrieb: > Marci W. schrieb: >> Im Ernst: was soll in Deinem Beispiel der arme Downloader machen? > > Das Javascript ausführen und die Seite im Speicher so aufbauen, wie sie > vom Browser angezeigt würde und statt sie anzuzeigen, den html-Text in > eine Datei schreiben… Macht Sinn ;-) <schäm> ciao Marci
Moriz schrieb: > Ich meine Seiten wie www.telepolis.de, die die Links auf Artikel > dynamisch erzeugen. Die Linkziele selbst sind dann statisch. Warum will man sich diesen Propagandamüll für die Wagenknecht Partei runterladen? Setz mal ein "curl -s https://www.telepolis.de/ | grep href | grep feature" ab. Da sind ganz normale Links drin:
G. K. schrieb: > Warum will man sich diesen Propagandamüll für die Wagenknecht Partei > runterladen? Damit DU endlich einen Grund hast, deine schlechte Laune raus zu kotzen.
Frage an die Experten: In JS kann man ja ein komplettes Dom aufbauen – wie schafft man es, diesen Code aus dem Browser zu exportieren? Eigentlich müsste das doch per Debugger irgendwie machbar sein. Hat jemand eine Idee?
Moriz schrieb: > Damit DU endlich einen Grund hast, deine schlechte Laune raus zu kotzen. Kriegst du keine schlechte Laune von stalinistischen Loopboxen?
Moritz schrieb: > Ich meine Seiten wie www.telepolis.de, die die Links auf Artikel > dynamisch erzeugen. Die Linkziele selbst sind dann statisch. Gerade Telepolis[1] bereitet wenig Schwierigkeiten, geht ohne JS und ist sogar mit Text-Browsern (w3m, lynx, links2, elinks - können alle kein JS) benutzbar. Die a-href sind statisch. [1] und auch heise.de
:
Bearbeitet durch User
Nur wenn ich einen Link im Browser kopiere und den dann im Seitenquelltext suche, finde ich ihn nicht. Ähnliches gilt auch für die Schweizer Weltwoche. Nachtrag: Scriptbeispiel aus telepolis:
1 | <script type="application/ld+json"> |
2 | {"@context":"https:\/\/schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https:\/\/www.telepolis.de\/features\/Neue-Taktik-der-Letzten-Generation-Schoene-Reden-statt-Systemkritik-9652975.html"},{"@type":"ListItem","position":2,"url":"https:\/\/www.telepolis.de\/features\/US-Geheimdienste-Angriffe-auf-Krim-und-Schwarzmeerflotte-unterstuetzen-9654024.html"},{"@type":"ListItem","position":3,"url":"https:\/\/www.telepolis.de\/features\/Russland-lacht-ueber-Sanktionen-Oelgeschaeft-blueht-praechtiger-denn-je-9653990.html"},{"@type":"ListItem","position":4,"url":"https:\/\/www.telepolis.de\/features\/Maria-Montessori-Freiheitskaempferin-und-Vorreiterin-der-Inklusion-9653896.html"},{"@type":"ListItem","position":5,"url":"https:\/\/www.telepolis.de\/features\/IEA-schlaegt-Alarm-Methanemissionen-erreichen-trotz-Versprechen-fast-Rekordniveau-9653486.html"},{"@type":"ListItem","position":6,"url":"https:\/\/www.telepolis.de\/features\/Medien-Das-grosse-Versagen-in-und-nach-der-Corona-Krise-9653074.html"},{"@type":"ListItem","position":7,"url":"https:\/\/www.telepolis.de\/features\/Gesundheit-Streiks-und-Proteste-IT-Branche-kaempft-fuer-bessere-Arbeitsbedingungen-9652931.html"},{"@type":"ListItem","position":8,"url":"https:\/\/www.telepolis.de\/features\/Sahra-Wagenknecht-Appell-des-Papstes-zum-Ukraine-Krieg-richtig-9652961.html"},{"@type":"ListItem","position":9,"url":"https:\/\/www.telepolis.de\/features\/Eklat-in-Berlin-Bedroht-Aserbaidschan-Akademiker-in-Deutschland-9652786.html"},{"@type":"ListItem","position":10,"url":"https:\/\/www.telepolis.de\/features\/Leergefischt-In-Nord-und-Ostsee-schwimmen-immer-weniger-Fische-9652493.html"},{"@type":"ListItem","position":11,"url":"https:\/\/www.telepolis.de\/features\/Deutschland-im-Stillstand-Wie-Italien-uns-in-Sachen-Wachstum-ueberholt-hat-9652534.html"},{"@type":"ListItem","position":12,"url":"https:\/\/www.telepolis.de\/features\/Wikipedia-Selektive-Informationspolitik-fuer-Annalena-Baerbock-9652532.html"},{"@type":"ListItem","position":13,"url":"https:\/\/www.telepolis.de\/features\/USA-Israel-Allianz-Ist-Joe-Biden-wirklich-machtlos-gegenueber-Netanjahu-9652357.html"},{"@type":"ListItem","position":14,"url":"https:\/\/www.telepolis.de\/features\/Autopilot-Systeme-im-Test-Wie-sicher-sind-teilautomatisierte-Fahrzeuge-wirklich-9652000.html"},{"@type":"ListItem","position":15,"url":"https:\/\/www.telepolis.de\/features\/China-kaempft-um-technologische-Souveraenitaet-nicht-um-Dominanz-9651437.html"}]} |
3 | </script> |
Also einwandfrei ein Skript…
:
Bearbeitet durch User
Moriz schrieb: > G. K. schrieb: >> Lies einfach weniger Scheiße. > > Schreib einfach weniger Unsinn. Dann probier auf gar keinen Fall den curl von mir.
> Nur wenn ich einen Link im Browser kopiere und den dann im > Seitenquelltext suche, finde ich ihn nicht. Dann suchst du falsch.
1 | ... |
2 | <script type="application/ld+json"> |
3 | {"@context":"https:\/\/schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1,"url":"https:\/\/www.telepolis.de\/features\/Neue-Taktik-der-Letzten-Generation-Schoene-Reden-statt-Systemkritik-9652975.html"}, |
4 | ... |
5 | <article class="news row"> |
6 | <a href ="/features/Neue-Taktik-der-Letzten-Generation-Schoene-Reden-statt-Systemkritik-9652975.html" |
7 | name="startseite.tp.anrissliste.1" |
8 | > <!-- die Leerstelle hinter href von mir, spamblocker --> |
9 | ... |
Die Telepolis-Seite ist nur ein Beispiel für diese Art Seiten. Ich möchte vermeiden, aus solchen Kandidaten die Links zu Fuß rauszupulen. Das Script macht das, es muss nur ausgeführt werden…
Moritz schrieb: > In JS kann man ja ein komplettes Dom aufbauen – wie schafft man es, > diesen Code aus dem Browser zu exportieren? Eigentlich müsste das doch > per Debugger irgendwie machbar sein. Hat jemand eine Idee? Google halt mal nach "dump dom".
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.