Mit einem Webbrowser (IE oder Chrome) kann ich eine Webseite (.html) mit Ctl-S speichern, sie mit einem beliebigen Texteditor überprüfen und Daten in einem Tabellenformat anzeigen. Eine dieser Zahlen möchte ich extrahieren, aber für viele, viele Webseiten zu viele, um sie manuell auszuführen. Daher möchte ich WGET verwenden, um diese Webseiten nacheinander abzurufen, und ein anderes Programm schreiben, um die .html-Datei zu analysieren und die gewünschte Nummer abzurufen. Die von WGET unter der gleichen URL wie der Browser gespeicherte HTML-Datei enthält jedoch keine Datentabelle. Warum nicht? Es ist, als ob der Server erkennt, dass die Anforderung von WGET und nicht von einem Webbrowser stammt, und eine Hauptwebseite ohne Datentabelle bereitstellt. Wie kann ich mit WGET genau dieselbe Webseite erreichen? - Danke!
MEHR INFO:
Ein Beispiel für die URL, die ich abzurufen versuche, ist: http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US wobei die Zeichenfolge ICENX ein Symbol für einen Investmentfonds-Ticker ist , die ich zu einem von mehreren verschiedenen Tickersymbolen ändern werde. Dadurch wird eine Datentabelle heruntergeladen, wenn sie in einem Browser angezeigt wird. Die Datentabelle fehlt jedoch, wenn sie mit WGET abgerufen wird.
Antworten:
Wie Roadmr bemerkte, wird die Tabelle auf dieser Seite durch Javascript erzeugt. wget unterstützt kein Javascript, es gibt nur die vom Server empfangene Seite aus (dh bevor ein Javascript-Code ausgeführt wird) und daher fehlt die Tabelle.
Sie benötigen einen Browser ohne Kopf , der Javascript wie Phantomjs unterstützt :
mit save_page.js:
Wenn Sie nur Text extrahieren möchten, ist es möglicherweise am einfachsten, die Seite mit w3m zu rendern:
und / oder ändern Sie das phantomjs-Skript, um nur das zu sichern, woran Sie interessiert sind.
quelle
Sie können eine vollständige Website unter Verwendung von herunterladen
wget --mirror
Beispiel:
Die obige Befehlszeile, die Sie ausführen möchten, wenn Sie eine vollständige Website herunterladen und für die lokale Anzeige verfügbar machen möchten.
Optionen:
--mirror
Aktiviert Optionen, die zum Spiegeln geeignet sind.-p
Lädt alle Dateien herunter, die zum Anzeigen einer bestimmten HTML-Seite erforderlich sind.--convert-links
Konvertieren Sie nach dem Download die Links im Dokument für die lokale Anzeige.-P ./LOCAL-DIR
speichert alle Dateien und Verzeichnisse im angegebenen Verzeichnis.Weitere Informationen zu Wget-Optionen finden Sie in diesem Artikel: Übersicht über alle wget-Befehle mit Beispielen oder in der Manpage von Wget .
quelle
--recursive
Verwenden Sie stattdessen , was einfach weitergeht und jeden einzelnen Link in Ihrer URL "spinnt"--page-requisites
. Sollte sich genauso verhalten wie die Optionen, die Sie in grafischen Browsern beschreiben.Weitere Informationen erhalten Sie, wenn Sie
man wget
nach der--page-requisites
Option suchen (verwenden Sie "/", um beim Lesen einer Manpage zu suchen).quelle
Wenn die Antwort des Servers abhängig von der fragenden Quelle unterschiedlich ist, liegt dies hauptsächlich an der HTTP_USER_AGENT-Variablen (nur eine Textzeichenfolge), die mit einer Anforderung von der fragenden Quelle bereitgestellt wird, die den Server über die Technologie informiert.
Sie können Ihren Browser-Agenten hier überprüfen -> http://whatsmyuseragent.com
Gemäß dem WGET-Handbuch sollte dieser Parameter die Arbeit erledigen
--user-agent=AGENT
.Wenn dies nicht hilft, ist möglicherweise eine JavaScript-Verarbeitung erforderlich, um die gleiche Seite wie ein Browser abzurufen, oder eine entsprechende Anforderung mit GET-Parametern, damit der Server eine Antwort vorbereitet, für die kein JavaScript zum Ausfüllen der Seite erforderlich ist.
quelle