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?

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.


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 :)



3
content=`wget -O - $url`

@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.


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.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.