31 de julho de 2019

Data! Data! Data! I can't make bricks without clay!

– Sir Arthur Conan Doyle

War is ninety percent information.

– Napoleon Bonaparte

Knowledge is power. You can't begin a career, for that matter even a relationship, unless you know everything there is to know about it.

– Randeep Hooda

The alchemists in their search for gold discovered many other things of greater value.

Arthur Schopenhauer

Without big data analytics, companies are blind and deaf, wandering out onto the Web like deer on a freeway.

– Geoffrey Moore

The goal is to turn data into information, and information into insight.

– Carly Fiorina

Justificativa

Dados \(\rightarrow\) conhecimento acionável.

  • Notícias: política, economia, inovação, etc.
  • Finanças: ações, cotação de moeda, investimentos.
  • Opinião: projeção de vendas, melhoria de produto, tendências.
  • Avaliações de consumidor (customer review).
  • Condições/previsões climáticas.
  • Condições de tráfego.
  • Torneios de esporte e e-sports.

Dados gratuitamente disponíveis

O que é Web Scraping?

Web scraping (WS) is a process of automating the extraction of data in an efficient and fast way.1


Web scraping is a term for various methods used to collect information from across the Internet. It is also called web data extraction, screen scraping or web harvesting.2


Web scraping is the process of information extraction from resources that are located on the World Wide Web and the classification of scraped and unstructured data (usually found in HTML pages) in a structured form like Spreadsheets or database tables.3

O WS e a Engenharia de Caractetísticas

Diagrama de fluxo dos níveis de maturidade em engenharia de características para ciência de dados. Fonte: o autor.

Diagrama de fluxo dos níveis de maturidade em engenharia de características para ciência de dados. Fonte: o autor.

Objetivo desta aula

  • Consumo de dados da WEB é WEB Scraping (WS).
  • O R e Python possuem funcionalidades para WS.
  • Objetivos
    • Definir as tarefas e principais componentes de WS.
    • Descrever a estrutura de documentos XML/HTML e JSON.
    • Introduzir a linguagem de consulta XPath.
    • Apontar os principais desafios em WS.
    • Apresentar o landscape de funcionalidades do R e Python para WS.
    • Indicar conteúdo de WS em R e Python.

Principais tarefas de WS

Algumas das tarefas mais comuns1:

  1. Monitoramento de mídia digital (clipping).
  2. Monitoramento de rede social (Twitter, Facebook, etc).
  3. Download de arquivos (tabelas, documentos, imagens).
  4. Consumo de corrente de dados (data streamming).
  5. Consulta de dados financeiros (bolsa e criptomoeda).
  6. Análise de mercado (preços, leadings).
  7. Avaliação do consumidor.
  8. Enriquecimento de dados (geocode, clima, tráfego, contexto).
  9. Indexão de páginas web (Google e outros motores de busca).
  10. Sites agregadores de sites (Buscapé, Trivago, etc).
  11. Etc.

Componentes de WS

Web API

Uma web API é uma interface programática para um sistema definido de mensagens requisição-resposta, tipicamente expresso em JSON ou XML, que é acessado via internet – mais comumente por meio de um servidor baseado em HTTP.5

Web API

  • API:
    • Application Program Interface
    • Interface de Programação de Aplicativos.
  • Disponibilização de dados via Web API é a forma padrão de
    1. conferir acesso aos usuários.
    2. transferir dados entre aplicações.
  • Existem API públicas e documentadas (caso 1).
  • Existem API usadas pelos sites que podem ser exploradas (caso 2).
  • Esteja seguro quando aos aspectos legais/éticos da atividade.

Algumas Web API

Anatomia de documentos XML

Um exemplo de XML

<breakfast_menu>
  <food>
    <name>Belgian Waffles</name>
    <price>$5.95</price>
    <description>
      Two of our famous Belgian Waffles with plenty of real
      maple syrup
    </description>
    <calories>650</calories>
  </food>
  <food>
    <name>Berry-Berry Belgian Waffles</name>
    <price>$8.95</price>
    <description>
      Light Belgian waffles covered with an assortment of
      fresh berries and whipped cream
    </description>
    <calories>900</calories>
  </food>
</breakfast_menu>

https://www.w3schools.com/xml/simple.xml

Documentos XML

  • XML: eXtensible Markup Language.
  • Usado para representar dados em diversos formatos.
  • Tabelas, planilhas, documentos de texto, imagens, mapas, desenhos vetoriais, webpages, redes sociais, estilos de formatação de referências bibliográficas.
  • É tão genérico que pode representar qualquer tipo de estrutura de dados.
  • Comum para dados de estrutura hierárquica e/ou com metadados.

Tipos de arquivos XML (dialetos)

  • HTML (HiperText Markup Language): páginas de internet.
  • KML (Keyhole Markup Language): informação geográfica tri-dimensional.
  • CSL (Citation Style Language): referências bibliográficas.
  • ODF (Open Document Format): documentos de texto, planilha e slides, etc.
  • SVG (Scalable Vector Graphics): formato de imagens vetoriais.
  • Epub: publicação/livro eletrônico.

Exemplos de arquivos baseados em XML

O essencial

  • A unidade básica é o elemento ou nó.
  • O elemento é começa e termina com a tag nomeada.
  • O par de tags delimita o conteúdo do elemento.
  • Elementos podem conter elementos \(\rightarrow\) estrutura hierárquica.
  • Um elemento pode ter atributos do tipo campo = "valor".
  • A estrutura se assemelha a uma árvore.
  • Análogo às listas do R e dicionários do Python.
  • Embora muito verboso, a taxa de compressão é boa.
  • Web APIs usam XML para expor dados.

Documentos HTML

  • HTML: HyperText Markup Language.
  • É baseado em XML.
  • Função: exibição de conteúdo na WEB.
  • HTML é uma linguagem de marcação.
  • As marcações instruem o navegador sobre como exibir o conteúdo.
  • Os navegadores têm recursos para inspeção do código fonte.
  • Pressione F12 no navegador para iniciar a inspeção.
  • Parte do sucesso em WS está na habilidade em inspecionar o código-fonte e as requisições.

Anatomia de documentos JSON

Um exemplo de JSON

{
    "coord": {
        "lon": -49.27, "lat": -25.43
    },
    "main": {
        "temp": 299.64, "pressure": 1020, "humidity": 39,
        "temp_min": 299.15, "temp_max": 300.15
    },
    "wind": {
        "speed": 3.1, "deg": 340
    },
    "clouds": {
        "all": 40
    },
    "dt": 1525453200,
    "id": 6322752,
    "name": "Curitiba",
    "cod": 200
}

Open Weather Map - Curitiba.

Documentos JSON

  • JSON: JavaScript Oriented Notation.
  • Originou de um ramo da sintaxe JavaScript.
  • É simples, leve e não verboso.
  • Empregado em: Web API e bancos de dados NoSQL documentais.
  • Tipos primitivos de dados: lógico, númerico, string e nulo.
  • Containers para coleção de dados: array e lista.
  • Tem flexibilidade para representar estruturas complexas de dados.
  • Não tem campos de atributos para metadados.

Linguagem de consulta para XML

XPath

Até aqui…

  • Dados na WEB estão em:
    • API: formatos XML e JSON.
    • Páginas: formato HTML.
  • Estrutura de dados hierárquica.
  • Consulta baseada na inspeção do código fonte.
  • Importante: aspectos da requisição cliente-servidor.

Requisições

Protocolos de comunicação

  • Comunição na WEB usa protocolos nos bastidores baseados em
    • TCP: transmission control protocol.
    • IP: internet protocol.
    • TCP/IP: cuidam da transferência de dados entre computadores pela rede.
  • Existem protocolos TCP/IP específicos.
    • HTTP: hypertext transfer protocol.
    • FTP: file transfer protocol.
    • POP: post office protocol.
    • SMTP: simple mail transfer protocol .
    • IMAP: internet message access protocol.
  • Eles definem padrões de comunicação cliente-servidor sobre tarefas específicas.

HTTP essencial

  • HTTP parece simples mas na realidade é muito flexível e amplamente utilizado.
  • E capaz de transferir, reter ou enviar praticamente qualquer tipo de informação.
  • A comunicação mais simples é o cliente fazer requisições (por URL) e o servidor atendê-las (enviando a página/arquivo).
  • As ferramentas de desenvolvimento do navegador (tecla F12, aba Network) serão úteis para monitorar e detalhar os processos gerados pelas requisições.

Fluxo da comunicação

  1. O nagegador é o cliente HTTP (faz requisições).
  2. Uma requisição por URL solicita ao servidor de DNS (domain name service) quem é o IP que responde pelo domínio da URL (a URI).
  3. Ao saber o IP, o cliente envia requisões por HTTP para o servidor.
  4. O servidor responde as requições HTTP enviado o conteúdo solicitado (página, imagem, arquivo, etc).
Ilustração da comunicação cliente-servidor por HTTP.

Ilustração da comunicação cliente-servidor por HTTP.

Selenium Webdriver

Recursos em R e Python

Ferramentas para Web Scraping

Recursos em R e Python mais utilizados para web scraping. Existem outras bibliotecas acessórias mas que não foram incluídas. Fonte: o autor.

Recursos em R e Python mais utilizados para web scraping. Existem outras bibliotecas acessórias mas que não foram incluídas. Fonte: o autor.

Recursos em baixo nível

  • libxml2: parser de XML/HTML escrita em C.
  • libcurl: biblioteca de transferência de arquivos multiprotocolos. Faz requisições HTTP e outras. É escrita em C.
  • Selenium Web Driver: interface programática para controle de nevagadores escrita em Java.

Recursos em R para WS

Recursos em Python para WS

  • urllib3: cliente HTTP para Python.
  • httplib2: outro cliente HTTP para Python.
  • pycurl: cliente HTTP via interface com a libcurl.
  • requests: módulo mais alto nível escrito sobre a urllib3.
  • lxml: interface para a libxml2.
  • beatifulsoup4: faz processamento de arquivos HTML com interface pythonica para manipulação. Acomoda parsers da lxml e html5lib.
  • json: módulo para trabalhar com conteúdo JSON.
  • scrapy: uma estrutura para trabalhar com web crawling.

Aplicações de Web Scraping com R e Python