#' @title Função que realiza a extração de dados das despesas do arquivo html
#'
#' @description Função que realiza a extração de dados de despesas que estao no arquivo html
#'
#' @param sgbd Define qual é o Banco de Dados a ser utilizado.
#' Por padrão, é definido o SQLite.
#'
#' @importFrom magrittr %>%
#'
#' @export
#'
executar_data_wrangling_html_despesas <- function(sgbd = "sqlite") {
tb_requisicoes <- DBI::dbReadTable(connect_sgbd(sgbd), "tabela_requisicoes") %>%
dplyr::filter(arq_html_despesa_tratado == "N" & nm_arq_html_despesa != "")
DBI::dbDisconnect(connect_sgbd(sgbd))
if (nrow(tb_requisicoes) == 0) {
return(message("Todos os Arquivos HTML das despesas já foram tratados"))
} else {
purrr::pwalk(tb_requisicoes, data_wrangling_html_despesas, sgbd)
DBI::dbDisconnect(connect_sgbd(sgbd))
message("Todos os Arquivos HTML das despesas foram tratados com sucesso!")
}
}
######################################################################################
data_wrangling_html_despesas <- function(id, ano, cod_municipio, nm_municipio,
cod_entidade, nm_entidade, pagina,
status_request_html_pag, log_request_html_pag,
nm_arq_html_pag, documento, valor_documento,
link_despesa, nm_arq_html_despesa,
hash_arq_html_despesa,
log_tratamento_arq_html_despesa, sgbd, ...){
# Realiza o parser no arquivo HTML
nm_municipio <- limpar_nome(nm_municipio)
nm_entidade <- limpar_nome(nm_entidade)
subdir_resp_html_desp_entidade <- file.path("resposta_scraping_html",
nm_municipio,
nm_entidade
)
parser_arq_html <- xml2::read_html(file.path(subdir_resp_html_desp_entidade, nm_arq_html_despesa),
encoding = "UTF-8")
pegar_dados_html <- parser_arq_html %>%
rvest::html_nodes("label+ span") %>%
rvest::html_text() %>%
stringr::str_trim()
log_parser_arq_html_despesa <- log_data_hora()
tb_despesas_municipais <- tibble::tibble(
fase = pegar_dados_html[1],
data_do_pagamento = pegar_dados_html[2],
valor_do_pagamento = pegar_dados_html[3],
documento = pegar_dados_html[4],
empenho = pegar_dados_html[5],
data_empenho = pegar_dados_html[6],
tipo_de_empenho = pegar_dados_html[7],
favorecido = pegar_dados_html[8],
valor_do_empenho = pegar_dados_html[9],
valor_das_retencoes = pegar_dados_html[10],
restos_a_pagar = pegar_dados_html[11],
conta_bancaria = pegar_dados_html[12],
fonte_de_recurso_tcm = pegar_dados_html[13],
fonte_de_recurso_gestor = pegar_dados_html[14],
tipo_de_documento = pegar_dados_html[15],
# Enriqueci a tabela com o dado do código do município
cod_municipio = cod_municipio,
municipio = pegar_dados_html[16],
# Enriqueci a tabela com o dado do código da entidade municipal
cod_entidade = cod_entidade,
nm_entidade = pegar_dados_html[17],
poder = pegar_dados_html[18],
orgao = pegar_dados_html[19],
unidade_orcamentaria = pegar_dados_html[20],
funcao = pegar_dados_html[21],
subfuncao = pegar_dados_html[22],
programa = pegar_dados_html[23],
tipo_acao = pegar_dados_html[24],
acao = pegar_dados_html[25],
natureza_da_despesa_tcm = pegar_dados_html[26],
natureza_da_despesa_gestor = pegar_dados_html[27],
fonte_de_recurso_tcm_2 = pegar_dados_html[28],
fonte_de_recurso_gestor_2 = pegar_dados_html[29],
licitacao = pegar_dados_html[30],
dispensa_inexigibilidade = pegar_dados_html[31],
contrato = pegar_dados_html[32],
declaracao = pegar_dados_html[33],
foreign_key = id,
nm_arq_html_despesa = nm_arq_html_despesa,
hash_arq_html_despesa = hash_arq_html_despesa,
log_tratamento_arq_html_despesa = log_parser_arq_html_despesa,
link = link_despesa
)
DBI::dbWithTransaction(connect_sgbd(sgbd), {
DBI::dbWriteTable(connect_sgbd(sgbd),
"tabela_despesas_municipais",
tb_despesas_municipais,
append = TRUE)
# Grava "S" na tabela 'tabela_requisicoes' para controlar os arquivos HTML já tratados
DBI::dbExecute(connect_sgbd(sgbd), 'UPDATE tabela_requisicoes
SET arq_html_despesa_tratado = "S",
log_tratamento_arq_html_despesa = :log_parser_arq_html_despesa
WHERE id = :id;',
params = list(log_parser_arq_html_despesa = as.character(log_parser_arq_html_despesa),
id = as.character(id)))
}
)
DBI::dbDisconnect(connect_sgbd(sgbd))
return(print(paste("Tratado:", nm_arq_html_despesa, "-", nm_entidade)))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.