Es gibt wahrscheinlich zwei einfache Möglichkeiten, um das zu erhalten, was Sie möchten (der Text, der von zB zurückgegeben wird view-source:
).
wget (unter Windows mit dem GnuWin32-Paket wget verfügbar ).
Python mit dem Requests- Modul eines Drittanbieters (beide funktionieren auch unter Windows).
Vorausgesetzt, Python ist installiert, können Sie Requests abrufenpip
(mit etwas Ähnlichem python -m pip install requests
) oder Sie können die Requests PyPi-Seite besuchen .
Beachten Sie, dass Sie sich in jedem Fall einen Moment Zeit nehmen sollten, um eine geeignete User-Agent- Zeichenfolge auszuwählen . Sie können Google "Was ist meine Benutzeragentenzeichenfolge?" In jedem Browser, den Sie emulieren möchten, wird die aktuelle User-Agent-Zeichenfolge angezeigt, die Ihrem GUI-Browser zugeordnet ist.
wget
Wie von @Attie und @ivanivan vorgeschlagen, wget
kann dieselbe Quelle wie in einem GUI-Browser mit ex angezeigt werden . :
wget -O pagesource.html -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0" --no-check-certificate https://www.google.com
Im obigen Beispiel sind -O
(die Ausgabedateioption) und -U
(die User-Agent-Zeichenfolgenoption) der Schlüssel zum Abrufen desselben Formats, das Sie beispielsweise in Firefox haben. Diese Methode hat den kleinen Nachteil, dass Sie ex anzeigen müssen . pagesource.html selbst in der Befehlszeile.
Python
Ihre andere Option ist, wie bereits erwähnt, Python mit Anfragen zu verwenden.
Um die tatsächliche Seitenquelle zu erhalten, wie sie zB view-source:
angezeigt wird, erstellen Sie ein Skript, das dem folgenden ähnelt:
import requests user_agent = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'} url = 'https://www.google.com' response = requests.get(url, headers = user_agent) print(response.text)
Sie speichern dieses Skript wie " pagesource.py" und rufen es dann über die Befehlszeile ex auf. :
python pagesource.py | more
more
verhindert einfach, dass die gesamte Seite auf einmal gesichert wird. Erwähnenswert ist, dass Antwortobjekte über ein content
Attribut verfügen (das text
für unsere Zwecke sehr ähnlich ist). text
In diesem Fall werden jedoch die Elemente, die von einem GUI-Browser zurückgegeben werden, genauer nachgeahmt, wenn der Quellcode einer Seite angezeigt wird.
Seiten-Rendering
Dies ist nicht so einfach wie mit
wget
auf einer Seite, wie das wird nicht scripted Informationen füllen (.cgi
,.php
,.js
, etc.).
Seiten, die über serverseitige Skripte ( .cgi
/ .php
in Ihrer Frage) gerendert wurden, haben ihren Quellcode als Text (dh .html
und JavaScript), bevor sie an den Browser übergeben werden.
Mit JavaScript verarbeitet der Browser jedes Javascript in eine endgültig gerenderte Seite (es gibt kein "Zwischenformular"). Der Browser ändert tatsächlich den Seitencode in diesen Fällen (ändert das, was Sie sehen view-source:
). In ähnlicher Weise führt der Browser zusätzliche Schritte aus, um Links zu folgen und erforderliche Ressourcen (z. B. .css
Mediendateien usw.) für die endgültige Anzeige herunterzuladen .
Dies bedeutet, dass das, was Sie in der "Seitenquelle" des Browsers sehen, (im Allgemeinen) genau das ist, was der Browser verwendet, um die Seite anfangs zu rendern. Wenn ein .html
Link zu einem Element (z. B. ein Bild oder Video) nicht vorhanden ist, existiert er nicht (obwohl dies nicht unbedingt den informativen JavaScript-Code ausschließt).
Das heißt, Sie möchten möglicherweise verschiedene User-Agent-Zeichenfolgen zur Kenntnis nehmen und mit ihnen experimentieren. Server, die dynamisch Inhalte generieren, tun dies auf der Grundlage dieser Zeichenfolgen. Daher ist es zumindest theoretisch möglich, dass eine Seite traditionellere Ressourcenlinks im Vergleich zu JavaScript-Code generiert, beispielsweise basierend auf einem mobilen Browser oder einer Desktop-Browserzeichenfolge.