Web scraping com R

Pedro Franklin

UFU

21 de fevereiro de 2024

Referência de estudo

Para esta aula eu segui diretamente o capítulo Web Scraping do livro R for Data Science, segunda edição, de Hadley Wickham.

Instalando os pacotes necessários


install.packages("tidyverse")
install.packages("rvest")

Instalando os pacotes necessários

Lendo os pacotes


library(tidyverse)
library(rvest)

Lendo os pacotes

Páginas que utilizaremos


O que é web scraping?


Web scraping é o processo de extrair informações ou dados de páginas da web.

Podemos traduzir web scraping para o português como raspagem de dados na web ou simplesmente raspagem de dados.

Política do web scraping

Quando usar

  • quando precisamos coletar um volume grande de dados da internet.

Quando não usar

  • quando existem formas mais simples de coletar os dados (API, por exemplo);

  • os termos de um site não nos permite fazer isso.

Conceitos Básicos de HTML


Para fazer a extração de informações de páginas da web, é necessário primeiro entender um pouco sobre HTML, a linguagem que descreve páginas web. HTML significa HyperText Markup Language (Linguagem de Marcação de Hipertexto).

Como se parece uma página em HTML?


<html> <head>
<title>Page title</title> </head>
<body>
<h1 id='first'>A heading</h1>
<p>Some text &amp; <b>some bold text.</b></p>
<img src='myimg.png' width='100' height='100'>
</body>

HTML possui uma estrutura hierárquica formada por elementos, que consistem em uma tag de abertura (por exemplo, <tag>), atributos opcionais (id=‘first’), uma tag de fechamento (como </tag>), e conteúdo (tudo que está entre as tags de abertura e fechamento).

Elementos

Existem mais de 100 elementos HTML. Alguns dos mais importantes são:

  • Toda página HTML deve estar dentro de um elemento <html>, e deve ter dois elementos filhos: <head>, que contém metadados do documento, como o título da página, e <body>, que contém o conteúdo visível no navegador.

Elementos

  • Tags de bloco como <h1> (título 1), <section> (seção), <p> (parágrafo) e <ol> (lista ordenada) formam a estrutura geral da página.

Elementos

  • Tags inline como <b> (negrito), <i> (itálico) e <a> (link) formatam o texto dentro das tags de bloco.

Elementos

  • <img> é usada para exibir imagens na página;
  • <table> (tabelas), <tr> (linhas da tabela), <th> (cabeçalhos da tabela), <td> (células da tabela);
  • <div> cria uma divisão ou seção dentro da página.

Socorro!


Se você encontrar uma tag que nunca viu antes, pode descobrir o que ela faz com uma rápida pesquisa no ChatGPT.

A maioria dos elementos pode ter conteúdo entre suas tags de abertura e fechamento. Esse conteúdo pode ser tanto texto quanto outros elementos. Por exemplo, o seguinte HTML contém um parágrafo de texto, com uma palavra em negrito:

<p>
oi! meu <b>nome</b> é pedro.
</p>

Atributos


As tags podem ter atributos nomeados, que se parecem com name1='value1' name2='value2'. Dois dos atributos mais importantes são id e class, que são usados em conjunto com Cascading Style Sheets (CSS) para controlar a aparência visual da página. Eles são frequentemente úteis ao extrair dados de uma página. Atributos também são usados para registrar o destino de links (o atributo href dos elementos <a>) e a fonte de imagens (o atributo src do elemento <img>).

Exemplo: como os atributos de elementos são usados em conjunto com o CSS


HTML:

<p class="destaque">Este é um parágrafo em destaque.</p>


CSS:

.destaque{
  font-weight: bold;
  color: red;
}

Extraindo dados

  1. tenha a URL da página que deseja extrair;
  2. leia o HTML dessa página no R usando a função read_html();

Agora que você tem o HTML no R, é hora de extrair os dados de interesse! Primeiro, você aprenderá sobre os seletores CSS que permitem identificar os elementos de interesse e as funções do rvest que você pode usar para extrair dados deles.

Localizando Elementos


CSS é uma ferramenta para definir o estilo visual de documentos HTML. O CSS inclui uma linguagem simplificada para selecionar elementos em uma página chamada seletores CSS. Os seletores CSS definem padrões para localizar elementos HTML e são úteis para scraping porque oferecem uma maneira concisa de descrever quais elementos você deseja extrair.

Localizando elementos


p: seleciona todos os elementos <p>.

.title: seleciona todos os elementos com a classe "title".

#title: seleciona o elemento com o atributo de id igual a "title"; os atributos de id devem ser únicos dentro de um documento, portanto, isso selecionará apenas um único elemento.

Localizando elementos

  1. use html_elements() para encontrar todos os elementos que correspondem ao seletor.

Agora que você selecionou os elementos de interesse, será necessário extrair os dados, seja do conteúdo de texto ou de alguns atributos.

Textos e atributos


4.1 para extrair texto de elementos: html_text2;

4.2 para extrair dados de atributos: html_attr.

Tabelas


As tabelas HTML são compostas por quatro elementos principais: <table> (tabela), <tr> (linha da tabela), <th> (cabeçalho da tabela) e <td> (dados da tabela).

Tabelas


rvest fornece uma função que sabe como ler tabelas: html_table().

Aplicação

Star Wars


Para acessar a página que contém informações sobre os filmes da série Star Wars aqui.

Melhores séries segundo IMDB

Para nossa próxima tarefa, abordaremos algo um pouco mais desafiador: extrair as informações sobre as 250 melhores séries de acordo com o IMDb.

A página pode ser acessada por aqui.

Resumo