terça-feira, 12 de agosto de 2008

Fazendo Download de Sites com wget

Eu estava hoje precisando de um material sobre aprendizado por reforço e me deparei com uma chata dificuldade: O referido site não tinha versão em PDF do seu conteúdo. Não que isso fosse ruim mas, para estudar todo aquele material eu precisaria ficar o tempo todo à frente do computador, o que seria uma tarefa deveras enfadonha, tendo em vista que o material é dividido em centenas de páginas com mais outras centenas de referências a materiais utilizados em cada um dos capítulos. Então me veio em mente que eu precisava de algo pra copiar o site inteiro pra mim.

Antigamente, em meu tempo newbie de Windows, eu usava o GetRight para fazer essa atividade para mim. No entanto, com o passar dos tempos, o GetRight passou a não mais conseguir baixar por causa da sua "habilidade" de não deixar alterar o User-Agent de "GetRight Turbo Downloader" para algo como, por exemplo, "Mozilla Compatible".

Então, fui atrás de outro programa, que durante vários e vários anos me atendeu bem nessa tarefa. Chama-se . Apesar de ser shareware, era só reinstalar que ele ficava novinho em folha por 30 dias. Praticamente, todas as vezes que eu o usava eu precisava reinstalar.

Agora, como eu vim precisar fazer isso no Linux, fiquei pensando em uma forma prática de fazer essa mesma tarefa, sem precisar recorrer à programas de terceiros. Como eu sou programador, logo pensei em fazer um programa que fizesse isso pra mim. Lindo e fino, começei a desenvolver um script que usava o wget para resolver o endereço e pegar o arquivo e, caso fosse html ou algo do gênero, o script resolveria os endereços e chamaria recursivamente o wget para efetuar o download. Isso até que eu descobri que o próprio wget poderia fazer essa tarefa para mim, de maneira ainda mais fácil.



Então, depois dessa epopéia toda, eu resolvi montar um tuto rápido sobre como usar o wget para fazer o download de sites para você, sem se preocupar com nada além do que o próprio console.

Fazendo Download de sites inteiros usando o wget

Bom, o wget é uma ferramenta bem simples de usar e é como um canivete suíço, daqueles bem caros. Sua função é fazer download de "coisas" da web. Sua sintaxe básica é a seguinte:
wget http://tocadoelfo.blogspot.com

No entanto, o wget(man) e o less(man) são tudo o que você precisa para navegar na internet. O poder do wget está em poder fazer o download de recursos de uma página recursivamente, o que significa que tudo o que estiver linkado em alguma página html será baixado. Para isso, basta usar o comando:
wget -r http://tocadoelfo.blogspot.com

No entanto, alguns sites poderão não permitir o download de seus conteúdos. Para prevenir esta prática, eles normalmente usam de algumas técnicas:
  • Verificação do User-Agent da requisição
  • Limitação de arquivos baixados por minutos
  • Limitação de banda


Verificação do User-Agent

Muitos sites, ao detectarem que é um gerenciador de download quem está baixando o recurso, enviam páginas em branco ou mesmo negam a conexão, principalmente baseado na detecção do User-Agent de quem está requisitando determinado recurso. Para contornar essa dificuldade, você pode usar a seguinte linha:
wget -r -p -U UserAgent http://tocadoelfo.blogspot.com

Exemplos de User-Agent:
Firefox 3: Mozilla/5.0+
IE 6.0: Mozilla/5.0 (compatible; Mozilla/4.0; MSIE 6.0; Windows NT 5.1)
IE 7.0: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

Limitação de Banda e de Arquivos Baixados por Minuto

Para resolver este problema, você pode usar as opções --limit-rate e --wait. A sintaxe das duas é a seguinte:
wget --wait=20 --limit-rate=20K -r -p -U Mozilla http://tocadoelfo.blogspot.com

Onde, --wait=20 diz para o programa para aguardar 20s entre cada download, limitando a taxa de download a 20Kb/s.

Baixando somente o necessário

Para evitar que o wget saia baixando tudo o que vê pela frente, você pode usar o comando --no-parent, que limita o wget a baixar somente os arquivos de que ele necessita, sem baixar todos os arquivos que estiverem em determinada pasta.

Outras opções úteis

-m: Permite você fazer o download de toda a estrutura do site, de modo que o download fique da mesma forma que o original. -m é um atalho para as opções: -N -r -l inf –no-remove-listing.

-l ou --level: Permite definir a profundidade de "extração" do comando -r

-k ou --convert-links: Aponta os links para os arquivos locais, já baixados.

-p ou --page-requisites: Pega todos os arquivos necessários para a exibição de uma página.

Bom, é isso. Espero que esse tutorial também seja bastante útil para vocês.

Fonte: Geek to Live: Mastering Wget