Come ottenere il contenuto di una pagina web in una variabile di shell?


115

In Linux come posso recuperare un URL e ottenere il suo contenuto in una variabile in uno script di shell?

Risposte:


189

Puoi usare il wgetcomando per scaricare la pagina e leggerla in una variabile come:

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

Usiamo l' -Oopzione di wgetche ci permette di specificare il nome del file in cui wgetscarica il contenuto della pagina. Specifichiamo -di ottenere il dump sullo standard output e di raccoglierlo nella variabile content. Puoi aggiungere l' -qopzione silenziosa per disattivare l'output di wget.

Puoi usare il comando curl anche per questo:

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

Dobbiamo utilizzare l' -Lopzione poiché la pagina che stiamo richiedendo potrebbe essere stata spostata. In tal caso, dobbiamo ottenere la pagina dalla nuova posizione. L' opzione -Lo --locationci aiuta in questo.


Questo è davvero un bel trucco. Invoco uno script di shell tramite uno script php su un server proxy. Quando richiesto, il server proxy accende server costosi che si spengono dopo 2 ore. Ho bisogno dell'output di wget per l'output standard per il feedback al record della console Jenkins.
Dennis

devo ancora capire ... qualcuno può dimostrare come, ad es. ottieni un tag img in una variabile per questo link www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108

@ juggernaut1996: questa dovrebbe essere una domanda a parte. In breve, devi scaricare la pagina, estrarre l' srcattributo dell'elemento corretto, quindi scaricare quella pagina. Se installi tq , questo comando dovrebbe farlo:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pirocrisia

La versione 1.14 di Wget non accetta convert_links = oncon l' -O-opzione. Sta fallendo con errore -k can be used together with -O only if outputting to a regular file.. È previsto?
Prasad Bonthu

28

Ci sono molti modi per ottenere una pagina dalla riga di comando ... ma dipende anche se vuoi il codice sorgente o la pagina stessa:

Se hai bisogno del codice sorgente:

con ricciolo:

curl $url

con wget:

wget -O - $url

ma se vuoi ottenere ciò che puoi vedere con un browser, lynx può essere utile:

lynx -dump $url

Penso che tu possa trovare così tante soluzioni per questo piccolo problema, forse dovresti leggere tutte le pagine di manuale per quei comandi. E non dimenticare di sostituire $urlcon il tuo URL :)

In bocca al lupo :)



3
content=`wget -O - $url`

@rjack: (Ma l'articolo a cui ti sei collegato fa un buon caso per la sintassi $ (...).)
Jim Lewis

3

Se hai installato LWP , fornisce un binario chiamato semplicemente " GET ".

$ GET http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<HTML>
<HEAD>
  <META http-equiv = "Content-Type" content = "text / html; charset = utf-8">
  <TITLE> Pagina Web di esempio </TITLE>
</ HEAD> 
<Body>  
<p> Sei arrivato a questa pagina web digitando & quot; example.com & quot ;,
& Quot; example.net & quot; & quot; example.org & quot
  o & quot; example.edu & quot; nel tuo browser web. </p>
<p> Questi nomi di dominio sono riservati per l'uso nella documentazione e non sono disponibili 
  per la registrazione. Vedi <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, sezione 3. </p>
</ BODY>
</ HTML>

wget -O-, curle si lynx -sourcecomportano in modo simile.


2

Puoi usare curlo wgetper recuperare i dati grezzi, oppure puoi usare w3m -dumpper avere una bella rappresentazione testuale di una pagina web.

$ 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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.