Baixando dados fiscais do site Transparência no R

Ao contrário de outros sites do governo, o Transparência Orçamentária não tem um acesso por planilhas ou base de dados muito claro. Usei então como base para aprender um pouco de como extrair dados das tabelas de uma página genérica de internet.

O código abaixo faz o serviço, você só precisa mudar a variável ano na primeira linha para qualquer um entre 2013 e 2017.

O segredo, como sempre, é descobrir o endereço web correto. Para a busca básica, que é o que fazemos aqui, é “http://www.portaldatransparencia.gov.br/PortalFuncoes.asp?Exercicio=” seguido do ano. Esta busca específica só nos dá parte dos dados que são divididos em duas páginas. Acrescentamos “&Pagina=2” após o ano ao endereço para isso. Para ver alguma conta específica se deve adicionar &codFuncao=28” ao final. 28 é o código para encargos especiais, por exemplo. O resto do código é limpeza dos dados, que estão aqui em formato HTML.


ano = 2016

url = paste0("http://www.portaldatransparencia.gov.br/PortalFuncoes.asp?Exercicio=",ano)

page = readLines(url)

grep("Total",page)
pattern = '
<td class=\"colunaValor\">([^<]*)</td>
'
datalines = grep(pattern,page[290:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

v1 = gsub(".","",result, fixed = TRUE)
v1 = as.numeric(gsub(",",".", v1, fixed = TRUE))

grep("Funç", page)
pattern2 = '
<td class=\"firstChild\"><a href=\"/PortalFuncoes_Detalhe.asp?([^<]*)</a></td>
'
datalines = grep(pattern2,page[1:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern2,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

t1 = substr(result,94,nchar(result))
t1 = substr(t1, 1, nchar(t1)-10+1)

url = paste0("http://www.portaldatransparencia.gov.br/PortalFuncoes.asp?Exercicio=",ano,"&Pagina=2")

page = readLines(url)
grep("Total",page)

pattern = '
<td class=\"colunaValor\">([^<]*)</td>
'
datalines = grep(pattern,page[290:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

v2 = gsub(".","",result, fixed = TRUE)
v2 = as.numeric(gsub(",",".", v2, fixed = TRUE))

grep("Funç", page)
pattern2 = '
<td class=\"firstChild\"><a href=\"/PortalFuncoes_Detalhe.asp?([^<]*)</a></td>
'
datalines = grep(pattern2,page[1:length(page)],value=TRUE)
getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
gg = gregexpr(pattern2,datalines)
matches = mapply(getexpr,datalines,gg)
result = gsub(pattern,'\\1',matches)
names(result) = NULL

t2 = substr(result,94,nchar(result))
t2 = substr(t2, 1, nchar(t2)-10+1)

tab1 = data.frame(cbind(append(t1,t2), append(v1,v2)))
colnames(tab1) = c("Funcao","Valor")
tab1[,2] = as.numeric(paste(tab1[,2]))

tab1

O resultado é salvo na variável “tab1”.

 

Anúncios

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 )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s