Como obter o conteúdo de uma página da web em uma variável de shell?

115

No Linux, como posso buscar uma URL e obter seu conteúdo em uma variável no script de shell?

Aillyn
fonte

Respostas:

189

Você pode usar o wgetcomando para baixar a página e lê-la em uma variável como:

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

Usamos a -Oopção wgetque nos permite especificar o nome do arquivo no qual wgetdespeja o conteúdo da página. Especificamos -para obter o dump na saída padrão e coletá-lo na variável content. Você pode adicionar o-q opção silenciosa para desligar a saída do wget.

Você também pode usar o comando curl para isso:

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

Precisamos usar a -Lopção, pois a página que estamos solicitando pode ter sido movida. Nesse caso, precisamos obter a página do novo local. A opção -Lou --locationnos ajuda com isso.

codadicto
fonte
Este é um truque muito bom. Eu invoco um script de shell por meio de um script php em um servidor proxy. Quando solicitado, o servidor proxy ativa servidores caros que se desligam após 2 horas. Preciso que a saída do wget para a saída padrão retorne ao registro do console do Jenkins.
Dennis
eu ainda estou para entender isso ... alguém pode demonstrar como, por exemplo. obter uma tag img em uma variável para este link www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108
@ juggernaut1996: essa deve ser uma pergunta à parte. Resumidamente, você deve baixar a página, extrair o srcatributo do elemento correto e, em seguida, baixar essa página. Se você instalar tq , este comando deve fazê-lo:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty
A versão 1.14 do Wget não aceita convert_links = oncom -O-opção. Está falhando com erro -k can be used together with -O only if outputting to a regular file.. É esperado?
Prasad Bonthu
28

Existem muitas maneiras de obter uma página a partir da linha de comando ... mas também depende se você deseja o código-fonte ou a própria página:

Se você precisar do código-fonte:

com curl:

curl $url

com wget:

wget -O - $url

mas se você deseja obter o que pode ver com um navegador, o lynx pode ser útil:

lynx -dump $url

Acho que você pode encontrar tantas soluções para este pequeno problema, talvez você deva ler todas as páginas de manual para esses comandos. E não se esqueça de substituir $urlpelo seu URL :)

Boa sorte :)

julianvdb
fonte
3
content=`wget -O - $url`
Jim Lewis
fonte
@rjack: (Mas o artigo ao qual você criou um link apresenta um bom caso para a sintaxe $ (...).)
Jim Lewis,
3

Se você tiver o LWP instalado, ele fornece um binário chamado simplesmente " 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> Exemplo de página da web </TITLE>
</HEAD> 
<body>  
<p> Você acessou esta página da web digitando & quot; example.com & quot ;,
& quot; example.net & quot;, & quot; example.org & quot
  ou? exemplo.edu? em seu navegador da web. </p>
<p> Esses nomes de domínio são reservados para uso na documentação e não estão disponíveis 
  Para Registro. Consulte <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, Seção 3. </p>
</BODY>
</HTML>

wget -O-, curle lynx -sourcese comportam de maneira semelhante.

efêmero
fonte
2

Você pode usar curlou wgetpara recuperar os dados brutos ou pode usar w3m -dumppara ter uma bela representação de texto de uma página da 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
fonte