quinta-feira, 3 de setembro de 2015

Como capturar o texto de um site pela linha de comandos

O comando wget, muito conhecido pelos usuários de Linux, permite baixar uma página HTML de um site pela linha de comandos. Seu uso é simples:

$ wget www.ricardo.olonca.nom.br
--2015-09-03 16:27:00--  http://www.ricardo.olonca.nom.br/
Resolvendo www.ricardo.olonca.nom.br (www.ricardo.olonca.nom.br)... 162.243.226.87, 198.199.92.59
Conectando-se a www.ricardo.olonca.nom.br (www.ricardo.olonca.nom.br)|162.243.226.87|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 302 Found
Localização: http://ricardoolonca.blogspot.com.br [redirecionando]
--2015-09-03 16:27:01--  http://ricardoolonca.blogspot.com.br/
Resolvendo ricardoolonca.blogspot.com.br (ricardoolonca.blogspot.com.br)... 2800:3f0:4003:c01::84, 64.233.190.132
Conectando-se a ricardoolonca.blogspot.com.br (ricardoolonca.blogspot.com.br)|2800:3f0:4003:c01::84|:80... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: não especificada [text/html]
Salvando em: “index.html”

index.html                   [     <=>                          ] 244,18K   173KB/s   em 1,4s   


2015-09-03 16:27:03 (173 KB/s) - “index.html” salvo [250037]

O wget salva o arquivo index.html (você pode digitar a URL inteira para baixar outro arquivo). Porém, esse arquivo contém todas as marcações e tags HTML. Eis um exemplo de como é o arquivo.

$ head index.html
<!DOCTYPE html>
<html class='v2' dir='ltr'>
<head>
<meta content='width=1100' name='viewport'/>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<script type="text/javascript">(function() { var b=window,f="chrome",g="tick",k="jstiming";(function(){function d(a){this.t={};this.tick=function(a,d,c){var e=void 0!=c?c:(new Date).getTime();this.t[a]=[e,d];if(void 0==c)try{b.console.timeStamp("CSI/"+a)}catch(h){}};this[g]("start",null,a)}var a;b.performance&&(a=b.performance.timing);var n=a?new d(a.responseStart):new d;b.jstiming={Timer:d,load:n};if(a){var c=a.navigationStart,h=a.responseStart;0<c&&h>=c&&(b[k].srt=h-c)}if(a){var e=b[k].load;0<c&&h>=c&&(e[g]("_wtsrt",void 0,c),e[g]("wtsrt_","_wtsrt",h),e[g]("tbsd_","wtsrt_"))}try{a=null,
b[f]&&b[f].csi&&(a=Math.floor(b[f].csi().pageT),e&&0<c&&(e[g]("_tbnd",void 0,b[f].csi().startE),e[g]("tbnd_","_tbnd",c))),null==a&&b.gtbExternal&&(a=b.gtbExternal.pageT()),null==a&&b.external&&(a=b.external.pageT,e&&0<c&&(e[g]("_tbnd",void 0,b.external.startE),e[g]("tbnd_","_tbnd",c))),a&&(b[k].pt=a)}catch(p){}})();b.tickAboveFold=function(d){var a=0;if(d.offsetParent){do a+=d.offsetTop;while(d=d.offsetParent)}d=a;750>=d&&b[k].load[g]("aft")};var l=!1;function m(){l||(l=!0,b[k].load[g]("firstScrollTime"))}b.addEventListener?b.addEventListener("scroll",m,!1):b.attachEvent("onscroll",m);
 })();</script>
<meta content='blogger' name='generator'/>
<link href='http://ricardoolonca.blogspot.com.br/favicon.ico' rel='icon' type='image/x-icon'/>


Se você quiser somente os textos "úteis" sem as tags e marcações você pode usar o programa html2txt que pode ser instalado via apt-get.

# apt-get install html2txt

Após instalar o programa basta executá-lo passando como parámetro o arquivo index.html

$ html2text index.html
****** Informática, Rede, Software Livre ****** 
Neste espaço eu pretendo escrever pequenos artigos, dicas e opiniões sobre Software Livre e Redes, além de comentários pertinentes ao mundo da Informática. 
***** quarta-feira, 2 de setembro de 2015 ***** 
**** Teste_de_rede_com_hping3 **** 
Se você costuma testar a estabilidade da rede usando o ping, experimente o hping3. 
Com o hping3 você pode controlar melhor o uso do ping. Uma opção que costumo usar faz com que centenas de pacotes icmp sejam enviados para o alvo em um segundo. Muito bom para testar a estabilidade da rede, ou para testar o quanto uma máquina aguenta de requisições. Por exemplo, o comando: 
# hping3 -i u1000 8.8.8.8 -c 1000 -1 
envia 1000 pacotes (-c 1000) icmp (-1) para o alvo (8.8.8.8), cada pacote com um intervalo de 1000 microsegundos (-i u1000). Em outras palavras, 1000 "pings" por segundo. O resultado do comando está resumido abaixo. 
HPING 8.8.8.8 (eth0 8.8.8.8): icmp mode set, 28 headers + 0 data bytes 
len=46 ip=8.8.8.8 ttl=57 id=36829 icmp_seq=0 rtt=7.3 ms 
len=46 ip=8.8.8.8 ttl=57 id=36830 icmp_seq=1 rtt=6.3 ms 
len=46 ip=8.8.8.8 ttl=57 id=36832 icmp_seq=3 rtt=4.9 ms