Web scraping – Criando um crawler mínimo para imagens da NASA

Pra quem não sabe o que é web-scraping: É a atividade de extrair dados de um site via script programado para interagir com a interface destinada a usuários humanos.

Quando um site quer expor um conteúdo para robôs, ele não precisa considerar aspectos estéticos ou comportamentais de pessoas na construção dessa interface e por isso ela é chamada de Interface de Programação de Aplicativos (API em inglês).

Um scraper ou spider é um robô que caminha na internet pelas ruas que foram feitas para os *humanos* caminharem, ele anda pelas interfaces de usuários dos websites com o objetivo de obter dados expostos e estruturados para usuários humanos.

Um scraper clica em links, preenche e envia formulários, espera, etc; tudo como uma pessoa usando o site faria.

Se existe um caminho para robôs por que ir pela via dos usuários?

O site pode não fornecer uma API ou fornecê-la de maneira limitada. Por exemplo: usando a API do twitter você pode obter os últimos 3200 tweets de uma conta. Esse é o limite da rua que o Twitter construíu para os robôs passarem, se você quiser qualquer tweet a mais, terá de obtê-lo manualmente… OU usando um robô que se comporte como um humano e busque os tweets por você.

O MÍNIMO que um spider faz é enviar um request para uma URL e filtrar a response em busca de algo.

Imagine que você gosta muito de astronomia e diariamente visita o site da NASA Astronomic Picture of the Day e salva em seu disco a foto do dia.

Vamos automatizar esse processo.

Algo como:

#!/bin/bash
#captura o html da página
wget -qO- apod.nasa.gov |
#filtra pra ficar só <IMG SRC="image/xxxx/nnnnnnn...jpg"
grep IMG |
#remove o que não está entre aspas
cut -d '"' -f2 |
#captura a string resultante, e insere antes a raiz do link relativo
awk '{print "http://apod.nasa.gov/apod/" $0}' |
#baixa pro ~/Pictures
xargs wget --directory-prefix=/home/$USER/Pictures

Já cumpre essa tarefa, ele acessa o side da NASA, filtra o HTML em busca da imagem que deseja, e monta uma URL própria para obtê-la e salvar  na pasta /home/$USER/Pictures

Basta adicionar um job no cron para repetir esse script diariamente e pronto, você nunca mais* precisará buscar essa imagem, ela irá aparecer na sua pasta de imagens automaticamente.

Esse é um exemplo de spider rudimentar que pode ser feito. Ele não abre um navegador, não interpreta o HTML, só filtra o código fonte e não interage além do acessar e fazer download da imagem do dia. Ele funciona pois o site é simples e o acesso a ele é livre. Não pede login, não se preocupa com sessão, não usa javascript para posicionar os elementos ou renderizar o conteúdo. Cumpre uma sequência trivial: acessar o site e obter a única imagem da página.

Um roteiro mais exigente tornaria o desenvolvimento de um spider mais trabalhoso usando somente ferramentas do GNU/Linux.

Imagine fazer login enviando os dados via POST mantendo a sessão entre os requests, parsear a resposta usando regex para então obter o que se busca… Isso seria uma tarefa árdua e de difícil manutenção, por isso foram criadas bibliotecas em diversas linguagens de programação para interagir com sites de forma mais organizada e específica para esse contexto. Vamos explorar essas bibliotecas na próxima parte dessa série sobre scraping.

* Enquanto o site mantiver essa estrutura, ou similar (que não quebre o filtro)

Anúncios

Um comentário sobre “Web scraping – Criando um crawler mínimo para imagens da NASA

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s