#' @export
pega_state <- function(r) {
r %>%
httr::content('text') %>%
xml2::read_html() %>%
rvest::html_node('#javax\\.faces\\.ViewState') %>%
rvest::html_attr('value')
}
#' Funcao que baixa lista de processos do carf
#'
#' @export
lista_processos <- function(de, ate, path, min_pag = 1, max_pag = Inf) {
url1 <- 'https://carf.fazenda.gov.br/sincon/public/pages/ConsultarJurisprudencia/consultarJurisprudenciaCarf.jsf'
r <- httr::GET(url1, httr::config(ssl_verifypeer = FALSE))
state <- pega_state(r)
j_id <- xml2::read_html(r) %>%
rvest::html_node('#botaoPesquisarCarf') %>%
rvest::html_attr('onclick')
j_id <- paste('consultaJurisprudenciaForm',
regmatches(j_id, regexpr('j_id[0-9]{1,2}', j_id)), sep = ':')
dados <- list(
'AJAXREQUEST' = '_viewRoot',
'consultaJurisprudenciaForm' = 'consultaJurisprudenciaForm',
'consultaJurisprudenciaForm:dataInicialInputDate' = de,
'consultaJurisprudenciaForm:dataFinalInputDate' = ate,
'consultaJurisprudenciaForm:campoPesquisa1' = '1',
'campoPesquisa2' = '2',
'consultaJurisprudenciaForm:campoPesquisa3' = '1',
'javax.faces.ViewState' = state
)
dados[[j_id]] <- j_id
r2 <- httr::POST(url1, body = dados, httr::config(ssl_verifypeer = FALSE))
#cat(httr::content(r2, 'text'), file='teste.html')
# crawlr:::visualize.response(r2)
h <- httr::content(r2, 'text')
paginas <- regexec('[0-9]+ de ([0-9]+)', h)
paginas <- as.numeric(regmatches(h, paginas)[[1]][2])
if (is.infinite(max_pag - min_pag)) max_pag <- paginas
cat(sprintf('baixando de %d a %d...\n', min_pag, max_pag))
aux <- sapply(min_pag:max_pag, lista_processos_pag, r = r2, path = path)
invisible(aux)
}
lista_processos_pag <- function(pag, r, path) {
cat(sprintf('pag_%05d', pag), '\n')
url_pag <- 'https://carf.fazenda.gov.br/sincon/public/pages/ConsultarJurisprudencia/listaJurisprudenciaCarf.jsf'
state <- pega_state(r)
dados <- list('AJAXREQUEST' = '_viewRoot',
'formAcordaos' = 'formAcordaos',
'javax.faces.ViewState' = state,
'formAcordaos:dataScroller_2' = as.character(pag),
'ajaxSingle' = 'formAcordaos:dataScroller_2',
'AJAX:EVENTS_COUNT' = '1')
r_pag <- httr::POST(url_pag, body = dados, httr::config(ssl_verifypeer = FALSE))
arq_pagina <- sprintf('%s/pag_%05d.html', path, pag)
if (!file.exists(arq_pagina)) {
cat(httr::content(r_pag, 'text'), file = arq_pagina)
}
pega_state(r_pag)
aux <- sapply(((pag - 1) * 10):((pag - 1) * 10 + 9),
baixa_processo_jurisprudencia,
r = r_pag, pag = pag, path = path)
invisible(aux)
}
baixa_processo_jurisprudencia <- function(id, r, pag, path) {
tryCatch({
url_pag <- 'https://carf.fazenda.gov.br/sincon/public/pages/ConsultarJurisprudencia/listaJurisprudenciaCarf.jsf'
state <- pega_state(r)
dados <- list('formAcordaos' = 'formAcordaos',
'javax.faces.ViewState' = state)
form <- sprintf('formAcordaos:tblJurisprudencia:%d:numDecisao', id)
dados[[form]] <- form
r_processo <- httr::POST(url_pag, body = dados,
httr::config(ssl_verifypeer = FALSE))
n_processo <- xml2::read_html(r_processo)
n_processo <- rvest::html_node(n_processo, '#formAcordaos\\:numProcesso')
n_processo <- gsub('[^0-9]', '', rvest::html_text(n_processo))
cat(sprintf('pag %05d | id %05d | processo %s', pag, id, n_processo), '\n')
# cat(httr::content(r_processo, 'text'), file = 'teste.html')
arq_processo <- sprintf('%s/%07d_pag_%05d_p_%s.html', path, id, pag, n_processo)
if (!file.exists(arq_processo)) {
cat(httr::content(r_processo, 'text'), file = arq_processo)
}
}, error = function(e) {
n_processo <- 'xxxxxxxxxxxxxxxxx'
arq_processo <- sprintf('%s/%07d_pag_%05d_p_%s.html', path, id, pag, n_processo)
if (!file.exists(arq_processo)) {
cat(e$message, file = arq_processo)
}
cat(sprintf('pag %05d | id %05d | processo %s', pag, id, n_processo), '\n')
})
}
#' transforma arquivo html em data_frame
#'
#' @export
parser_jurisprudencia <- function(arqs, verbose = FALSE) {
dfp <- dplyr::data_frame(arq = arqs) %>%
dplyr::mutate(n_processo = stringr::str_match(arq, '_p_([0-9]+)')[, 2])
d <- dplyr::do(dplyr::group_by(dfp, n_processo, arq),
parser_jurisprudencia_arq(.$arq, verbose = verbose))
d <- dplyr::ungroup(d)
d
}
#' transforma arquivo html em data_frame
#'
#' @export
parser_jurisprudencia_pag <- function(arqs, spread = FALSE, verbose = FALSE) {
parser_jurisprudencia_pag_um <- function(arq, verbose) {
h <- xml2::read_html(arq)
tabelas <- rvest::html_nodes(h, xpath = '//table[@id="formAcordaos:tblJurisprudencia"]//table')
tbl <- lapply(tabelas, rvest::html_table, fill = TRUE)
tbl <- lapply(tbl, function(x) {x$id <- runif(1); x})
tbl <- dplyr::bind_rows(tbl)[c('X1', 'id')]
names(tbl) <- c('keyval', 'id')
tbl <- dplyr::mutate(tbl, keyval = gsub('//.*\n', '', keyval),
keyval = ifelse(
stringr::str_detect(keyval, '^[0-9]'),
paste0('n_acordao:', keyval), keyval))
tbl <- tidyr::separate(tbl, keyval, c('key', 'val'), '\\:', extra = 'merge')
tbl$key <- stringr::str_trim(abjutils::rm_accent(tolower(tbl$key)))
tbl$key <- gsub('[()]', '', gsub(' +', '_', tbl$key))
tbl <- dplyr::filter(tbl, !is.na(key), key != '')
ano <- gsub('/.*', '', gsub('.*//', '', arq))
a <- gsub('\\.html', '.rds', gsub('.*/', '', arq))
# saveRDS(tbl, sprintf('~/Dropbox/Projects/crawlercarf/jurisprudencia/temp_pags/%s_%s', ano, a))
tbl
}
d <- dplyr::data_frame(arq = arqs) %>%
dplyr::mutate(pag = stringr::str_match(arq, 'pag_([0-9]+)')[, 2])
d <- dplyr::group_by(d, pag, arq)
d <- dplyr::do(d, parser_jurisprudencia_pag_um(.$arq, verbose = verbose))
d <- dplyr::ungroup(d)
if (spread) d <- tidyr::spread(d, key, val)
d
}
pega_tag <- function(h, xpath) {
tag <- tryCatch({
rvest::html_text(rvest::html_node(h, xpath = xpath))
}, error = function(e) {
''
})
tag
}
parser_jurisprudencia_arq <- function(arq, verbose = FALSE) {
try({
if (verbose) cat(arq, '\n')
h <- xml2::read_html(arq)
n_processo <- pega_tag(h, '//*[@id="formAcordaos:numProcesso"]')
contribuinte <- pega_tag(h, '//*[@id="formAcordaos:contribuinte"]')
tipo_recurso <- pega_tag(h, '//*[@id="formAcordaos:tdivTipoRecurso"]/span[2]')
relator <- pega_tag(h, '//*[@id="formAcordaos:relator"]')
data_sessao <- pega_tag(h, '//*[@id="formAcordaos:dataSessao"]')
n_acordao <- pega_tag(h, '//*[@id="formAcordaos:numDecisao"]')
tributo <- pega_tag(h, '//*[@id="formAcordaos:tdivMateria"]/span[2]')
txt_ementa <- pega_tag(h, '//*[@id="formAcordaos:ementa"]')
txt_decisao <- pega_tag(h, '//*[@id="formAcordaos:textDecisao"]')
n_anexos <- length(rvest::html_nodes(h, xpath = '//img[contains(@id, "imageAnexos")]'))
d <- data.frame(n_acordao = n_acordao,
n_processo = n_processo,
tipo_recurso = tipo_recurso,
tributo = tributo,
data_sessao = data_sessao,
contibuinte = contribuinte,
relator = relator,
n_anexos = n_anexos,
txt_ementa = txt_ementa,
txt_decisao = txt_decisao,
stringsAsFactors = FALSE)
return(d)
})
return(data.frame(erro = 'erro', stringsAsFactors = FALSE))
}
rm_accent <- function(x) {
gsub("`|\\'", "", iconv(x, to = "ASCII//TRANSLIT"))
}
#' @export
consolidar_resultados <- function(d) {
cat('resultados...\n')
negar_provimento <- 'negar?(do)?(am)? (o )?provimento|negou se (o )?provimento|recurso nao provido|negar lhes? provimento|negando lhes? provimento|nega lo provime'
dar_provimento <- 'dar?(do)? (o )?provimento|deu se (o )?provimento|recurso provido|dar lhes? provimento'
em_parte <- 'em parte|parcial'
diligencia <- 'diligencia'
nao_conhecer <- 'nao conhece|nao reconhecer'
anular <- 'nul(a|o|i)'
d_aux <- d %>%
dplyr::mutate(txt_decisao2 = gsub(' +', ' ', gsub(
'\n|\r', ' ', gsub('[[:punct:]]|\n\r|\r\n', ' ', tolower(txt_decisao)))
),
txt_decisao2 = rm_accent(txt_decisao2),
negar_provimento = stringr::str_detect(txt_decisao2, negar_provimento),
dar_provimento = stringr::str_detect(txt_decisao2, dar_provimento),
em_parte = stringr::str_detect(txt_decisao2, em_parte),
diligencia = stringr::str_detect(txt_decisao2, diligencia),
nao_conhecer = stringr::str_detect(txt_decisao2, nao_conhecer),
anular = stringr::str_detect(txt_decisao2, anular)) %>%
dplyr::mutate(soma = negar_provimento + (dar_provimento | em_parte) +
diligencia + nao_conhecer + anular) %>%
dplyr::mutate(negar_provimento = ifelse(negar_provimento, 'negar_provimento', ''),
dar_provimento = ifelse(dar_provimento, 'dar_provimento', ''),
em_parte = ifelse(em_parte, 'em_parte', ''),
diligencia = ifelse(diligencia, 'diligencia', ''),
anular = ifelse(anular, 'anular', ''),
nao_conhecer = ifelse(nao_conhecer, 'nao_conhecer', ''),
comb = str_trim(gsub(' +', ' ', paste(negar_provimento,
dar_provimento,
em_parte,
diligencia,
anular,
nao_conhecer)))) %>%
dplyr::mutate(comb = ifelse(stringr::str_detect(comb, 'em_parte'), 'em_parte', comb),
comb = ifelse(stringr::str_detect(comb, 'negar') & stringr::str_detect(comb, 'dar_'),
'em_parte', comb),
comb = ifelse(stringr::str_detect(comb, 'negar'), 'negar_provimento', comb),
comb = ifelse(stringr::str_detect(comb, 'anular') &
stringr::str_detect(comb, 'dar_') &
!stringr::str_detect(comb, 'nao_conhecer'),
'dar_provimento', comb),
comb = ifelse(stringr::str_detect(comb, 'anular') &
stringr::str_detect(comb, 'dar_') &
stringr::str_detect(comb, 'nao_conhecer'),
'dar_provimento', comb),
comb = ifelse(stringr::str_detect(comb, 'dar_') &
!stringr::str_detect(comb, 'anular') &
stringr::str_detect(comb, 'nao_conhecer'),
'em_parte', comb),
comb = ifelse(stringr::str_detect(comb, 'anular|nao_conhecer|dilig'),
'anulado, nao conhecido ou diligencia', comb),
comb = ifelse(comb == '', 'vazio', comb))
result <- d_aux %>%
dplyr::select(-(negar_provimento:soma), -txt_decisao2) %>%
dplyr::mutate(resultado = comb) %>%
dplyr::mutate(decisao = resultado,
resultado = ifelse(decisao == 'negar_provimento' &
tipo_recurso %in% c('RECURSO DE OFÍCIO',
'RECURSO ESPECIAL DO PROCURADOR'),
'FAVORAVEL', resultado),
resultado = ifelse(decisao == 'dar_provimento' &
tipo_recurso %in% c('RECURSO DE OFÍCIO',
'RECURSO ESPECIAL DO PROCURADOR'),
'DESFAVORAVEL', resultado),
resultado = ifelse(decisao == 'dar_provimento' &
tipo_recurso %in% c('RECURSO VOLUNTARIO',
'RECURSO ESPECIAL DO CONTRIBUINTE'),
'FAVORAVEL', resultado),
resultado = ifelse(decisao == 'negar_provimento' &
tipo_recurso %in% c('RECURSO VOLUNTARIO',
'RECURSO ESPECIAL DO CONTRIBUINTE'),
'DESFAVORAVEL', resultado),
resultado = ifelse(decisao == 'em_parte',
'PARCIALMENTE FAVORAVEL', resultado),
resultado = toupper(resultado),
resultado = ifelse(stringr::str_detect(resultado, '_'), 'VAZIO', resultado))
return(result)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.