Cloud Computing

Esse exercício é um pequeno projeto de código automático que captura dados da internet e armazena em uma estrutura. Tal projeto pode ser uma base para qualquer estrutura de captura de dados direto da web.

Um crawler é um robô usado pelos buscadores para encontrar e indexar páginas ou informações de um site. Ele captura informações das páginas, possibilitando encontrar outras páginas e mantendo sua base de dados atualizada. Essa técnica passou a ser usada para obter informações e dados localizados em sites e portais. Hoje, uma prática recorrente em data Science.

O crawler se baseia em tags html, propriedades de css e/ou por qualquer componente em uma pagina web. São através desses componentes que obtemos as informações. Todo e qualquer navegador possui uma ferramenta para análisar o código fonte da página. No Google Chrome, por exemplo, basta clicar com o botão direito e selecionar a opção Inspecionar ou pelo atalho digitando Ctrl + Shift + I.

inspecionar elemento

inspecionar elemento

É através dessa ferramenta que conseguimos mapear e identificar como as informações são organizadas por detrás da página e, consequentemente, obter os dados.

Vamos criar um crawler que captura informações do site da viaquatro referente ao status de operação das linhas do metrô de São Paulo.

Anteção: Proposta: construir um código que entra de tempos em tempos no site do metrô de São Paulo, e captura as informações de status de operação das linhas do metrô.

Pagina dá viaquatro

Pagina dá viaquatro

Utilizaremos os seguintes pacotes:

Vamos dividir nosso futuro script em partes:

  1. Criação do arquivo no qual iremos salvar os dados. É importante programar os detalhes;

  2. Mapeamento e criação da captura das informações;

Anteção: Dica: Veja a imagem e o código exemplo abaixo, de como se obtem os dados dentro de uma página html.

url_base = 'http://www.viaquatro.com.br'

metro_html <- url_base %>% 
  httr::GET() %>% 
  httr::content('text', encoding = 'latin1') %>% 
  xml2::read_html() %>% 
  rvest::html_nodes('section.operacao')
  1. tratamento das informações;

Anteção: Dica: Veja o código exemplo abaixo.

É importante

metro_data <-  metro_html %>% 
  rvest::html_nodes('time') %>% 
  rvest::html_text()
print(metro_data)

[1] "29/10/2018 18:46"
  1. Salvando os dados.

Por fim, adicione os dados obtidos no arquivo destinado a guardar essas informações.

Como a proposta do projeto é fazer com que o código rode sozinho, é possível programar sua execução. Programar tarefas é algo comum em qualquer sistema operacional, mas a forma como as tarefas são criadas e programas variam. No windows temos o Agendador de Taferas, no Linux temos os chamados Shell scripts e no Mac temos o iCal Alarm.

No R, podemos criar e agendar tarefas por meio do pacote cronR para o Linux e o taskscheduleR para o Windows. O pacote permite:

Podemos agendar a execução do nosso script utilizando o taskscheduleR da seguinte forma:

library(cronR)
cmd <- cron_rscript('metro_sp.R')

## run script once within 62 seconds
cron_add(cmd, frequency = '*/15 * * * *', id= 'MetroSP',description = 'Web Scraping Metro de SP/ 15min')

> ## cronR job
> ## id:   MetroSP
> ## tags:
> ## desc: Web Scraping Metro de SP/ 15min
> */15 * * * * /usr/lib/R/bin/Rscript '/home/ubuntu/teste.R'  >> '/home/ubuntu/metro_sp.log' 2>&1

Podemos remover um task criado, rodando o comando:

cron_rm(id = 'MetroSP')

>Removed 1 cron job.

Utilizando as informações anteriores, crie uma tarefa com o pacote cronR para a captura de dados do metrô de São Paulo com a máquina criada na EC2.

Jonatha Azevedo

novembro 2018