ED: Raspagem de dados

Siga os Números | Descomplicando os dados | Como encontrar dados? | Criando seu conjunto de dados | ED: Raspagem de dados

O conteúdo dessa seção foi reproduzido e adaptado, com permissão, de material desenvolvido pela Escola de Dados e originalmente publicado aqui.

Muitas vezes, o acesso aos dados não é fácil. Por mais que a gente desejasse que tudo estivesse disponível em formato da nossa preferência, dados são divulgados de maneira diferente na internet. E se você quiser combiná-los com outros dados ou explorá-los por conta própria? Raspagem neles!

Raspagem de dados é como se chama o método para extrair os dados escondidos em documentos, como páginas da web ou PDFs, e torná-los possíveis de serem processados. É uma das habilidades mais úteis se você vai investigar dados, e muitas vezes não é algo muito difícil. Para raspadores mais simples, não é preciso saber escrever códigos. Nesse tutorial, vamos mostrar como raspar dados usando três ferramentas: o Google Sheets, o IFTTT e uma extensão do navegador Chrome chamada Webscraper.

X

X

Como raspar dados com o Google Sheets

Como raspar dados com o IFTTT

Como raspar dados com o Webscraper


X

X

Como raspar dados com o Google Sheets

Para raspar tabelas ou listas em páginas da web é possível usar a seguinte fórmula no Google Sheets:

=importHTML("URL"; "table/list"; N)

Mas o que inserir nessa fórmula? Dentro dos parênteses, você incluirá os “parâmetros” da raspagem que quer fazer – ou seja, as diretrizes. O primeiro parâmetro, que precisa ser colocado entre aspas, é o endereço da página em que você está de olho. O segundo parâmetro, também entre aspas, pode ser “table” (tabela) ou “list” (lista), dependendo do que você está querendo raspar. O terceiro – o N, esse sem aspas – é um número, começando do 1, que identifica qual das tabelas ou listas da página é aquela que você quer raspar.

Um parênteses: Os parâmetros são separados por “ponto e vírgula” se a sua planilha no Google Sheets estiver configurada para o Brasil. Caso contrário, o separador pode ser a vírgula. Clique em “Arquivo” e depois em “Configurações da planilha…” pra conferir essas opções.

Vejamos como funciona na prática. O site da Infraero traz uma tabela com informações sobre atrasos e cancelamentos de voos no Brasil (ela está disponível aqui). A tabela tem essa cara:

e-book-escola-de-dados-raspagem-1
Clique na imagem para abri-la e ver os números em detalhes (Fonte: Infraero)

Para raspar os dados dessa tabela, em vez de usar a famosa sequência CTRL + C e CTRL + V, comece criando uma tabela em branco no Google Sheets. Na primeira célula, digite “=importHTML”. Veja que você começa a digitar e o Google Sheets já completa a fórmula pra você:

e-book-escola-de-dados-raspagem-2
Clique na imagem para abri-la e ver as informações em detalhes

Finalize o comando colocando o endereço da página e os outros dois parâmetros (“table” e 1):

e-book-raspagem-4

Depois de dar enter, assista os dados serem carregados para sua planilha:

e-book-escola-de-dados-raspagem-3
Clique na imagem para abri-la e ver os números em detalhes

Se os dados da tabela do site da Infraero forem atualizados, os dados da planilha no Google Sheets também serão sempre que você recarregar a página ou executar a fórmula novamente.

Outro parênteses: A fórmula “importHTML” pode não funcionar para determinadas páginas, em função do tipo de programação realizada nelas. É preciso testar. Há, ainda, outros comandos para importação de dados no Google Sheets que podem ser úteis e servir para casos específicos (dê uma olhada aqui para conhecer as alternativas).

Bônus: É possível usar o comando “importHTML” para raspar dados do mercado de ações, por exemplo. O site Pregão Online atualiza a cada minuto o desempenho dos índices de ações calculados pela BM&FBovespa. Essas informações ficam disponíveis da seguinte forma:

e-book-raspagem-1
Clique na imagem para abri-la e ver os números em detalhes (Fonte: Pregão Online)

Para transportar os dados para uma planilha do Google Sheets, use o comando assim:

e-book-raspagem-3

O que você verá aparecer na sua planilha depois de apertar o enter é isso:

e-book-raspagem-2
Clique na imagem para abri-la e ver as informações em detalhes

Voltar para o início


X

X

Como raspar dados com o IFTTT

O IFTTT é um serviço que reúne uma série de ferramentas e redes sociais na web. Nele, é possível conectar sites com sua conta de e-mail, por exemplo. Você pode programar o IFTTT para que envie para seu e-mail a foto astronômica do dia cada vez que a Nasa a publicar. Ou então, conectar algum serviço de notícia com seus favoritos: quando uma reportagem sobre, digamos, saúde, for publicada pelo The New York Times, o artigo é salvo automaticamente na sua lista de leitura. Parece confuso? Pense nesse site como um robô que conecta um determinado serviço a outro e executa automaticamente o que você configurar, baseado em algumas condições.

IFTTT é uma singla em inglês que significa “If this, than that” ou seja, “Se isso, então aquilo”. O nome já diz muita coisa sobre o funcionamento do IFTTT: “Se isso acontecer, então outra coisa deve acontecer em seguida”. Aqui você vai aprender como raspar dados do Instagram usando o IFTTT e guardá-los numa planilha do Google Sheets. Sempre que alguém postar uma foto no serviço e ela se encaixar no seu parâmetro de busca, as informações sobre a postagem, incluindo a foto, serão salvas automaticamente na planilha. E nosso parâmetro de busca será uma determinada localização. Assim, sempre que alguém postar uma foto e marcar essa localização, o raspador será acionado.

Para começar, acesse o IFTTT e crie uma conta. Já na página inicial, o site vai sugerir algumas “receitas” – como são chamados os procedimentos do tipo “Se isso, então aquilo”. Dê uma olhada:

e-book-raspagem-5
Clique na imagem para abri-la e ver as informações em detalhes

Clique em “Channels” e digite “instagram” na caixa de busca. Clique no ícone do Instagram e no botão azul escrito “connect”. Ali, você vai precisar colocar suas credenciais do Instagram. Uma mensagem verde vai confirmar que sua conta está habilitada para ser usada com o IFTTT. Clique em “Channels” novamente e procure por “Google Drive”, que é o canal que permite a criação e manipulação de planilhas do Google Sheets, na caixa de busca. Conecte-o, colocando as credenciais da sua conta Google. A mesma coisa pode ser feita com o Twitter ou qualquer outro serviço que você queira conectar.

e-book-escola-de-dados-raspagem-4
Clique na imagem para abri-la e ver as informações em detalhes

Encontrados os canais de que você vai precisar, agora é hora de montar sua receita. Clique em “My Recipes”. Depois, vá até o botão “Create a Recipe”.

e-book-escola-de-dados-raspagem-5
Clique na imagem para abri-la e ver as informações em detalhes

 

Relembrando: A ideia desse raspador que estamos programando é capturar as informações dos posts de Instagram (inclusive as fotos) tiradas num local específico. Ou seja, toda vez que alguém tirar uma foto cujas coordenadas geográficas coincidam com a nossa escolha, as informações vão direto para uma nova linha numa planilha do Google Sheets, em função dos parâmetros que estabelecemos.

Para começar a montar sua receita, escolha a primeira parte dela: o Instagram. Para fazer isso, clique na palavra “This”, digite “instagram” e então selecione o canal.

e-book-escola-de-dados-raspagem-6
Clique na imagem para abri-la e ver as informações em detalhes

Em seguida, é preciso escolher um “gatilho” (ou “trigger”), evento que precisa acontecer no Instagram para ativar o próximo passo – a ação (ou o “That”). Nesse caso, precisamos do gatilho “New photo by anyone in area”, que significa “Nova foto tirada por qualquer pessoa numa área”.

e-book-escola-de-dados-raspagem-7
Clique na imagem para abri-la e ver as informações em detalhes

Agora é preciso escolher a região geográfica de interesse. Podemos procurar usando a busca ou navegar pelo mapa usando a interface gráfica. Esse raspador vai capturar fotos tiradas próximas ao Mineirão, o maior estádio de futebol de Minas Gerais. Podemos ajustar aqui o tamanho da área de captura. Lembrando que todos as fotos do Instagram que forem postadas dentro dessa região demarcada farão parte da busca.

e-book-escola-de-dados-raspagem-8
Clique na imagem para abri-la e ver as informações em detalhes

Pronto. Agora que o IFTTT vai separar pra gente todas as fotos tiradas na região do Mineirão, vamos dizer a ele o que fazer com elas. Vamos conectar o canal do Google Drive pra que os dados sejam salvos numa planilha do Google Sheets. Clique em “That”, digite “Google Drive” e selecione o canal.

e-book-escola-de-dados-raspagem-9
Clique na imagem para abri-la e ver as informações em detalhes

Agora vamos escolher uma ação que vai ocorrer toda vez que o IFTTT encontrar fotos no Instagram que foram tiradas na região do Mineirão. Escolha a ação “Add row to spreadsheet”, que significa “Acrescentar linha a uma planilha”. Um detalhe: uma nova planilha será criada depois que 2000 linhas forem adicionadas.

e-book-escola-de-dados-raspagem-10
Clique na imagem para abri-la e ver as informações em detalhes

Vamos dar um nome para essa planilha e escolher quais dados queremos incluir nela. Se você clicar no ícone azul, verá a lista de dados que o Instagram permite incluir: a legenda da foto, o link para o post na página do Instagram, o link para a foto, o nome do usuário, informações sobre a geolocalização, a hora de criação e o código HTML para colocar o post em outras páginas da web.

e-book-escola-de-dados-raspagem-11
Clique na imagem para abri-la e ver as informações em detalhes

O IFTTT incluiu por padrão as seguintes colunas: data de criação, nome de usuário, legenda, link para o post e a imagem. Cada coluna é separada por três “pipes”, o nome desse caractere que se parece com uma pequena barra. Você pode criar mais colunas e acrescentar outros dados se quiser. Vamos incluir o link direto para imagem, pois isso pode servir para fazer uma galeria de fotos depois. Basta digitar os três “pipes” e selecionar “SourceUrl”.

e-book-escola-de-dados-raspagem-12
Clique na imagem para abri-la e ver as informações em detalhes

Por último escolhemos onde a planilha será salva no nosso Google Drive. Do jeito que está ela vai ser salva na pasta Instagram, que está dentro de outra pasta, chamada IFTTT, na raiz do Google Drive. Agora é só clicar no botão azul “Create Action” e dar um nome para sua receita.

e-book-escola-de-dados-raspagem-13
Clique na imagem para abri-la e ver as informações em detalhes

Clique em “Create Recipe” para criar e ativar a receita. Agora é só aguardar que sua planilha será criada no Google Drive e os dados serão incluídos automaticamente por tempo indeterminado.

e-book-escola-de-dados-raspagem-14
Clique na imagem para abri-la e ver as informações em detalhes

Veja que a planilha exibe as informações solicitadas: a data, o nome do usuário, a legenda da foto e todo o resto. Agora é só começar a analisar a planilha e procurar padrões, como objetos fotografados, se houve algum usuário que postou mais fotos, quais #hashtags foram as mais usadas ou se há algum assunto recorrente nas postagens. É possível fazer receitas semelhantes com outros canais, como o Twitter. Procure por tweets postados a partir de um lugar específico, ou a partir de uma busca de hashtag ou palavra.

Um parênteses: Fotos que forem tiradas em perfis privados, que precisam de autorização do autor para serem vistos, não aparecerão nessa busca. Além disso, há um limite de 15 resultados que o Instagram entrega para o IFTTT cada vez que a busca é realizada.

Bônus: Para quem cobre finanças e negócios, o IFTTT pode ser uma mão na roda. É possível, por exemplo, criar receitas que enviam uma mensagem para seu e-mail ou fazem soar um alerta cada vez que um novo item é incluído em algum feed de notícias. A fórmula, aliás, está prontinha aqui. E veja que beleza: a Comissão de Valores Mobiliários (CVM), órgão regulador do mercado de capitais, tem alguns feeds prontos no seu site – confira a lista aqui. Não seria uma beleza ser automaticamente informado quando um processo sancionador contra um agente do mercado é julgado? Ou cada vez que o colegiado (instância máxima da entidade) toma uma decisão?

Muitas empresas também disponibilizam recursos desse tipo, o que pode ajudar bastante quem é setorista – ou seja, responsável pela cobertura de determinado setor ou empresa. Veja só, por exemplo, os feeds que a mineradora Vale disponibiliza (basta clicar aqui).

Para quem cobre bolsa de valores, o IFTTT traz sugestões prontas de receitas interessantíssimas aqui. É possível programar o sistema para soar um alerta cada vez que determinada ação ultrapassar um certo percentual de valorização ou desvalorização, por exemplo. Ou ainda criar um robô que insira o preço de fechamento de uma ação em uma planilha todos os dias. Isso pode ajudá-lo a acompanhar movimentos bruscos ou padrões esquisitos nos papéis.

Há milhares de outras funcionalidades – basta usar a criatividade. Dá para acompanhar o que grandes empresários postam nas redes sociais. Em alguns casos, eles podem mexer com o preço das ações na bolsa de valores. Não acredita? O ex-bilionário Eike Batista, dono do grupo EBX, era um especialista em redes sociais. Seu império chegou ao topo em parte inflado pelos comentários que fazia no Facebook e em outros aplicativos. Como acabava revelando demais nas redes, essa foi mais uma acusação que pesou contra ele depois que seu conglomerado de empresas começou a ruir. Já pensou que bela reportagem com dados seria uma em que se juntassem os horários de seus posts com o desempenho das ações das suas empresas no mesmo momento?

Voltar para o início


X

X

Como raspar dados com o Webscraper

Para fazer raspagens mais elaboradas, é possível usar uma extensão do navegador Chrome chamada Webscraper. As formas de raspagem que vimos anteriormente usam ferramentas que não dependem muito da estrutura das páginas. O Google Sheets raspa tabelas e listas e o IFTTT conecta serviços. Com o Webscraper, vamos poder raspar mais páginas diferentes da internet. O primeiro a fazer é instalar a extensão Webscraper para funcionar no seu computador. Nesse link da Chrome Web Store, clique no botão verde para adicionar a extensão ao Chrome.

e-book-escola-de-dados-raspagem-15
Clique na imagem para abri-la e ver as informações em detalhes

Depois que fizer a instalação, um ícone de teia de aranha aparecerá do lado da barra de endereços do seu Chrome.

e-book-escola-de-dados-raspagem-16

Para aprender como raspar tabelas, vamos ao portal de transparência do Governo Federal. Lá, vamos escolher os “Gastos Diretos do Governo”, indicando que a busca seja feita por programa e no ano de 2014.

e-book-escola-de-dados-raspagem-17
Clique na imagem para abri-la e ver as informações em detalhes

Observe que essa busca volta 18 páginas com todos os programas do Governo Federal e quanto ele gastou em cada um no ano de 2014. Temos o número do programa, o título e o valor gasto. Agora, uma pergunta: não seria possível usar a função “importHTML” do Google Sheets para raspar essas tabelas? Até poderia. Mas nesse caso seria preciso copiar e colar 18 URLs diferentes na fórmula (já que foram 18 páginas de resultados) para montar uma tabela, página por página. Isso seria uma grande perda de tempo. O Webscraper consegue capturar todos esses dados de forma automatizada. Basta que seja configurado um “robô” de raspagem.

e-book-escola-de-dados-raspagem-18
Clique na imagem para abri-la e ver os números em detalhes

Para fazer isso, vamos precisar dar uma olhada no código de programação da página. Isso se faz clicando com o botão direito do mouse em qualquer lugar da página e selecionando a opção “Inspecionar” (ou “Inspect” ou ainda “Inspect element”).

e-book-escola-de-dados-raspagem-19
Clique na imagem para abri-la e ver as informações em detalhes

Quando isso for feito, será aberto o chamado Webinspector do Chrome na parte inferior da página. Perceba que no menu superior do Webinspector há uma opção chamada Webscraper.

e-book-escola-de-dados-raspagem-20
Clique na imagem para abri-la e ver as informações em detalhes

Veja na imagem que dentro do menu Webscraper há um submenu com três opções: “Sitemaps”, “Sitemap” e “Create new sitemap”. Veja o que se faz com cada uma delas:

  • Sitemaps: aqui ficam listados os sitemaps – ou robôs de raspagem – que forem criados. Chamamos de robô de raspagem a rotina de captura de informações. Cada site que quisermos raspar pressupõe uma rotina específica, então cada site precisa de um robô diferente.
  • Sitemap: é nesse opção do submenu em que se configura um robô.
  • Create new sitemap: aqui são efetivamente criados ou importados robôs configurados anteriormente ou em outros computadores. Digamos que um colega seu fez um robô. Ele pode passar as configurações para você, que as importa aqui. Com isso, pode usar o mesmo robô que seu colega.

Agora que sabemos o que é o que, vamos criar um robô. Clique em “Create new sitemap” e dê um nome a ele. Vamos chamá-lo de “transparência”. Indique também o endereço da página onde o robô fará a captura. Nesse caso, é a página que estamos acessando (essa aqui: http://www.portaldatransparencia.gov.br/PortalTransparenciaGDProgramaPesquisaPrograma.asp?Desastre=0&Ano=2014).

Um parênteses: Nessa raspagem temos 18 páginas. Queremos que o robô do Webscraper faça o serviço sozinho, sem que precisemos ficar clicando para passar pelas 18 páginas. Por isso, precisamos “dizer” ao Webscraper qual é o endereço da primeira página e também qual é a progressão até chegar à última. Preste atenção ao endereço da página – a URL – da busca que fizemos (lembra? procuramos por “Gastos Diretos do Governo”, por programa, em 2014). Na parte inferior, cada vez que clicamos em “Próxima”, para ver os resultados que aparecem na página seguinte da busca, o final da URL muda. Quando vamos para a página 2, por exemplo, a URL fica assim: http://www.portaldatransparencia.gov.br/PortalTransparenciaGDProgramaPesquisaPrograma.asp?Desastre=0&Ano=2014&Pagina=2

Notou que apareceu um parâmetro novo, chamado “Pagina=2”? Se clicarmos em “Próxima” de novo, esse parâmetro novo na URL vai mudar para “Pagina=3”. Se formos para a última página, o parâmetro será “Pagina=18”. Isso quer dizer que cada página tem um endereço diferente, mas a única coisa que muda é o número após “Pagina=”. Dá para concluir também que o número progride de 1 em 1, começando do 1 até o 18. Então, na hora de copiar e colar o endereço de onde o robô vai começar a raspagem, será preciso “informar” o Webscraper sobre essa progressão de páginas. Para facilitar a vida, em vez de copiar o endereço da primeira página da busca, copie o da última e cole no lugar indicado. No fim da URL, será preciso trocar o número 18 pelo intervalo 1-18, entre colchetes. Basta digitar isso: [1-18]

e-book-escola-de-dados-raspagem-22
Clique na imagem para abri-la e ver as informações em detalhes

Clique em “Save sitemap” (ou “Create sitemap”) pra criar o robô. Você será direcionado automaticamente para o menu “Sitemap” – e, ao lado da palavra Sitemap, estará indicado entre parênteses o nome do robô que você acabou de criar. Por enquanto ele estará sem nenhuma atribuição. Então, clique no botão “Add new selector” para adicionar os elementos – ou seletores – que vamos raspar.

e-book-escola-de-dados-raspagem-24
Clique na imagem para abri-la e ver as informações em detalhes

As próximas etapas desse nosso passo a passo estão descritas abaixo – e também gravadas em um vídeo simples (em formato GIF) exibido na sequência. A sugestão é que você preste atenção às duas coisas. Então vamos lá:

  • No campo “Id”, chamaremos o seletor de “tabela”. No campo “Type”, devemos indicar que tipo de elemento queremos raspar. É uma tabela? É uma lista? É um texto? Há várias opções. Como vamos raspar a tabela do Portal da Transparência, selecionamos “table”.
  • No campo “Selector”, a gente clica em “Select” e depois no topo da tabela, na página. Dessa forma, o Webscraper mostra pra gente o que ele acha que seja a tabela e ilumina em vermelho. Ele também coloca nesse campo de texto uma referência do código HTML pra informar onde está essa tabela.
  • Como ele reconheceu a tabela sem dificuldades, a gente clica no botão azul “Done selecting!”. Nisso, a referência do código HTML segue para a parte de baixo, no campo “Selector”. Veja que o Webscraper já preencheu os outros campos (do cabeçalho e dos dados) pra gente.
  • Como são muitos campos, vamos marcar também a opção “Multiple”.

webscraper_gif01

Na parte de baixo do Webscraping, aparecem as colunas que existem na tabela. Nesse caso, “Programa” e o “Total no ano (R$)”. Para que essas duas colunas sejam incluídas na nossa raspagem, deixamos essas caixinhas marcadas. Então, basta salvar clicando no botão azul (“Save selector”).

e-book-escola-de-dados-raspagem-25
Clique na imagem para abri-la e ver as informações em detalhes

Antes de começar a raspagem propriamente dita, é possível visualizar os dados que serão coletados clicando em “Data Preview”, o segundo retângulo azul.

Veja que os dados foram capturados corretamente!

Se estiver tudo certo, é só clicar em “Sitemap (transparencia)” e depois em “Scrape”.

e-book-escola-de-dados-raspagem-26
Clique na imagem para abri-la e ver as informações em detalhes

Agora, é preciso configurar quanto tempo o robô vai esperar pra mudar de página em microssegundos. Vamos deixar 2000, que são dois segundos, para evitar enviar requisições ao servidor do Portal da Transparência em curtos espaços de tempo. Se muitas pessoas fizessem isso, a rede pode ficar sobrecarregada e prejudicar o acesso de todo mundo.

A segunda opção configura quanto tempo o robô vai esperar o carregamento da página antes de tentar raspar as informações. Esse número pode variar dependendo do tempo de resposta entre a sua conexão e a conexão do servidor do portal da transparência. Se você perceber que o robô não raspou tudo que você queria, aumente esse número para dar mais tempo para a página carregar.

e-book-escola-de-dados-raspagem-27
Clique na imagem para abri-la e ver as informações em detalhes

Agora é só clicar em “Start scraping”. Uma janela nova vai abrir e as páginas vão carregar automaticamente. O processo todo, nesse exemplo, vai demorar um minuto. Veja que os dados agora aparecem na própria interface do Webscraper para a gente conferir.

e-book-escola-de-dados-raspagem-28
Clique na imagem para abri-la e ver as informações em detalhes

Se estiver tudo OK, podemos exportar os dados pra um arquivo CSV. Depois de clicar em “Sitemap (transparencia)”, escolha a última opção (“Export data as CVS”). Aí é só clicar em “Download now!” e salvar o arquivo no computador. Esse arquivo poderá ser manipulado no Google Sheets ou em qualquer outro aplicativo de planilhas.

e-book-escola-de-dados-raspagem-29
Clique na imagem para abri-la e ver as informações em detalhes

Voltar para o início


Para resumir: Falamos de raspagem e sobre como extrair dados de sites usando ferramentas gratuitas. A principal função da raspagem é converter dados semi-estruturados em dados estruturados e, assim, torná-los aptos para novos processamentos. Isso é algo relativamente simples se você sabe um pouco de programação. Mais simples ainda para o caso de trabalhos com uma página só da internet, quando é possível executar a tarefa sem conhecimentos de programação.

Para explorar mais o assunto da raspagem de dados, eis as seguintes leituras:

Voltar para o início


Todo o conteúdo produzido pela Escola de Dados está disponível sob a licença Creative Commons Attribution-ShareAlike v3.0.
Siga adiante:
ED: Guia de limpeza de dados

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