Wie erhalte ich den Inhalt einer Webseite in einer Shell-Variablen?

115

Wie kann ich unter Linux eine URL abrufen und ihren Inhalt in einer Variablen im Shell-Skript abrufen?

Aillyn
quelle

Antworten:

189

Mit dem wgetBefehl können Sie die Seite herunterladen und in eine Variable einlesen:

content=$(wget google.com -q -O -)
echo $content

Wir verwenden die -OOption, mit wgetder wir den Namen der Datei angeben können, in die wgetder Seiteninhalt ausgegeben wird. Wir geben -an, den Dump auf die Standardausgabe zu bringen und diesen in der Variablen zu sammeln content. Sie können die -qleise Option hinzufügen , um die Wget-Ausgabe auszuschalten.

Sie können den Befehl curl auch für Folgendes verwenden:

content=$(curl -L google.com)
echo $content

Wir müssen die -LOption verwenden, da die von uns angeforderte Seite möglicherweise verschoben wurde. In diesem Fall müssen wir die Seite vom neuen Speicherort abrufen. Die Option -Loder --locationhilft uns dabei.

Codaddict
quelle
Das ist ein wirklich toller Trick. Ich rufe ein Shell-Skript über ein PHP-Skript auf einem Proxyserver auf. Auf Nachfrage schaltet der Proxyserver teure Server ein, die sich nach 2 Stunden selbst ausschalten. Ich benötige die Ausgabe von wget, damit die Standardausgabe auf den Jenkins-Konsolendatensatz zurückgeführt werden kann.
Dennis
Ich muss das noch bekommen ... kann jemand demostrieren, wie, zum Beispiel. Holen Sie sich ein IMG-Tag in einer Variablen für diesen Link www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108
@ juggernaut1996: das sollte eine separate frage sein. Kurz gesagt, Sie müssen die Seite herunterladen, das srcAttribut des richtigen Elements extrahieren und dann diese Seite herunterladen . Wenn Sie tq installieren , sollte dieser Befehl es tun:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
Pyrocrasty
Wget 1,14 Version akzeptiert nicht convert_links = onmit -O-Option. Es schlägt mit Fehler fehl -k can be used together with -O only if outputting to a regular file.. Wird es erwartet?
Prasad Bonthu
28

Es gibt viele Möglichkeiten, eine Seite über die Befehlszeile abzurufen ... aber es hängt auch davon ab, ob Sie die Codequelle oder die Seite selbst möchten:

Wenn Sie die Codequelle benötigen:

mit Locke:

curl $url

mit wget:

wget -O - $url

Wenn Sie jedoch das erhalten möchten, was Sie mit einem Browser sehen können, kann Luchs nützlich sein:

lynx -dump $url

Ich denke, Sie können so viele Lösungen für dieses kleine Problem finden, vielleicht sollten Sie alle Manpages für diese Befehle lesen. Und vergessen Sie nicht, $urldurch Ihre URL zu ersetzen :)

Viel Glück :)

julianvdb
quelle
3
content=`wget -O - $url`
Jim Lewis
quelle
@rjack: (Aber der Artikel, den Sie verlinkt haben, ist ein ziemlich gutes Argument für die $ (...) Syntax.)
Jim Lewis
3

Wenn Sie LWP installiert haben, wird eine Binärdatei mit dem Namen " GET " bereitgestellt .

$ GET http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<HTML>
<KOPF>
  <META http-equiv = "Inhaltstyp" content = "text / html; charset = utf-8">
  <TITLE> Beispielwebseite </ TITLE>
</ HEAD> 
<body>  
<p> Sie haben diese Webseite erreicht, indem Sie "example.com" eingegeben haben.
& quot; example.net & quot;, & quot; example.org & quot;
  oder & quot; example.edu & quot; in Ihren Webbrowser. </ p>
<p> Diese Domainnamen sind für die Verwendung in der Dokumentation reserviert und nicht verfügbar 
  für die Registrierung. Siehe <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, Abschnitt 3. </ p>
</ KÖRPER>
</ HTML>

wget -O-, curlUnd in lynx -sourceähnlicher Weise verhalten.

kurzlebig
quelle
2

Sie können die Rohdaten verwenden curloder wgetabrufen oder w3m -dumpeine schöne Textdarstellung einer Webseite erstellen.

$ foo=$(w3m -dump http://www.example.com/); echo $foo
You have reached this web page by typing "example.com", "example.net","example.org" or "example.edu" into your web browser. These domain names are reserved for use in documentation and are not available for registration. See RFC 2606, Section 3.
Giacomo
quelle