Webscrapping II – Baixando tabelas com o readHTMLTable

Neste segundo post sobre webscrapping, vamos apresentar um modo mais simples de extrair informações de tabelas em sites.

No exemplo anterior, acessamos o código fonte da página e copiamos seu texto através da função readLines. Desta vez, utilizaremos um comando do pacote XML, que é bastante utilizado para coleta de dados na internet com o R.

A linguagem HTML, básica para a escrita do conteúdo web, é organizada de forma “hierárquica”. No código-fonte, todo conteúdo de uma página se localiza entre as expressões: <HTML> e </HTML>. Essas duas expressões marcam o início e o fim de uma área dentro da qual todas as demais informações estarão contidas. Podemos entendê-las como demarcando as fronteiras de um grande conjunto. O conteúdo exibido no corpo principal da página é delimitado por <BODY> e </BODY>. Dentro desse “sub-conjunto”, é possível criar um parágrafo, cujo início e fim são assinalados por <p> e </p>. Vejam esse exemplo aqui.

Ou seja, todo conteúdo HTML se localiza dentro de “nós” ou nodes. Há um nó principal que contém todos os demais — e que marca o início e o fim de qualquer site. O que nos interessa é que o conteúdo de uma tabela é delimitado por <TABLE> e </TABLE>. Neste link, vocês encontram exemplos.

Algumas funções do pacote XML conseguem compreender essa estrutura da linguagem HTML e acessar o conteúdo dos nodes determinados. A função readHTMLTable é especifica para tabelas.

Vejamos como podemos simplificar código do exemplo anterior, através do uso desse comando:

require(XML)

# Endereço básico
baseurl <- "http://www.portaldatransparencia.gov.br/servidores/OrgaoExercicio-ListaServidores.asp?CodOS=25201&DescOS=BANCO%20CENTRAL%20DO%20BRASIL&CodOrg=25201&DescOrg=BANCO%20CENTRAL%20DO%20BRASIL&Pagina=XX"

#Loop para fazer download de uma sequencia de páginas
data <- data.frame()
for (i in 1:278) { #contador: vai da página 1 à pág. 278
  print(i) #imprime na tela a página que está sendo acessada
  url <- gsub("XX", i, baseurl) #substitui a expressão XX no endereço pelo índice da página
  x <- readHTMLTable(url)[[2]]

  data <- rbind(data, x) #salva os resultados num vetor
}

data #resultado final

O comando readHTMLTable extrai todas as tabelas da página. Aplicando um índice depois do comando, é possível acessar apenas a tabela de número desejado. Nesse caso, desejávamos a tabela de número “2”, por isso, readHTMLTable(url)[[2]].

Reparem que não foi preciso aplicar funções para “limpar” o conteúdo e retirar caracteres especiais.

Bem mais simples agora.

Anúncios

Uma resposta em “Webscrapping II – Baixando tabelas com o readHTMLTable

  1. Pingback: Mapas no R, parte 2: utilizando shapes | Sociais & Métodos

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 )

Foto do Google

Você está comentando utilizando sua conta Google. 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 )

Conectando a %s