¿Cómo obtener el contenido de una página web en una variable de shell?

115

En Linux, ¿cómo puedo obtener una URL y obtener su contenido en una variable en un script de shell?

Aillyn
fuente

Respuestas:

189

Puede usar el wgetcomando para descargar la página y leerla en una variable como:

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

Usamos la -Oopción de wgetque nos permite especificar el nombre del archivo en el que wgetvolca el contenido de la página. Especificamos -obtener el volcado en la salida estándar y recopilarlo en la variable content. Puede agregar la -qopción silenciosa para desactivar la salida wget.

Puede usar el comando curl para esto, así como:

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

Necesitamos usar la -Lopción ya que la página que estamos solicitando podría haberse movido. En cuyo caso, necesitamos obtener la página de la nueva ubicación. La opción -Lo --locationnos ayuda con esto.

codaddict
fuente
Este es un truco realmente genial. Invoco un script de shell a través de un script php en un servidor proxy. Cuando se le pregunta, el servidor proxy enciende servidores costosos que se apagan después de 2 horas. Necesito la salida de wget para que la salida estándar retroalimente al registro de la consola de Jenkins.
Dennis
todavía tengo que conseguir esto ... ¿alguien puede demostrar cómo, por ejemplo. obtener una etiqueta img en una variable para este enlace www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108
@ juggernaut1996: esa debería ser una pregunta aparte. Brevemente, debe descargar la página, extraer el srcatributo del elemento correcto y luego descargar esa página. Si instala tq , este comando debería hacerlo:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty
La versión Wget 1.14 no se acepta convert_links = oncon la -O-opción. Está fallando por error -k can be used together with -O only if outputting to a regular file.. ¿Es esperado?
Prasad Bonthu
28

Hay muchas formas de obtener una página desde la línea de comandos ... pero también depende de si desea la fuente del código o la página en sí:

Si necesita el código fuente:

con rizo:

curl $url

con wget:

wget -O - $url

pero si desea obtener lo que puede ver con un navegador, lynx puede ser útil:

lynx -dump $url

Creo que puede encontrar tantas soluciones para este pequeño problema, tal vez debería leer todas las páginas de manual de esos comandos. Y no olvides reemplazar$url por tu URL :)

Buena suerte :)

julianvdb
fuente
3
content=`wget -O - $url`
Jim Lewis
fuente
@rjack: (Pero el artículo al que vinculó hace un caso bastante bueno para la sintaxis $ (...).)
Jim Lewis
3

Si tiene LWP instalado, proporciona un binario simplemente llamado " 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> Ejemplo de página web </TITLE>
</HEAD> 
<cuerpo>  
<p> Ha llegado a esta página web escribiendo & quot; example.com & quot ;,
& quot; example.net & quot;, & quot; example.org & quot
  o & quot; example.edu & quot; en su navegador web. </p>
<p> Estos nombres de dominio están reservados para su uso en documentación y no están disponibles. 
  para registro. Consulte <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, Sección 3. </p>
</BODY>
</HTML>

wget -O-, curly se lynx -sourcecomportan de manera similar.

efímero
fuente
2

Puede usar curlo wgetpara recuperar los datos sin procesar, o puede usar w3m -dumppara tener una buena representación de texto de una página 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.
Giacomo
fuente