Cloud Computing
Exercício 1
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
É 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
Utilizaremos os seguintes pacotes:
- dplyr: uma ferramenta de manipulação de dados;
- rvest: facilita a coleta de dados da internet;
- httr: ferramentas para trabalhar com http e requisições;
- xml2: lida com arquivos XML usando uma interface simples e consistente;
- stringr: conjunto de ferramentas para lidar com strings.
Vamos dividir nosso futuro script em partes:
Criação do arquivo no qual iremos salvar os dados. É importante programar os detalhes;
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')- 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"- 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:
Obter a lista de tarefas
Remover uma tarefa
Adicionar uma tarefa
É possível agendar as tarefas com periodicidade:
- ‘minutely’
- ‘HOURLY’
- ‘DAILY’
- ‘HOURLY’
- ‘MINUTE’
- ‘@reboot’
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>&1Podemos 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.