rscielo: um scraper em R para extrair informações do Scielo

Acaba de ser aceito no CRAN um pacote que Denisson Silva, Rogério Barbosa e eu decidimos criar há algum tempo: o rscielo. Resumidamente, o pacote é um scraper para extrair informações de periódicos hospedados no Scientific Electronic Library Online, Scielo. Por meio dele, é possível coletar metadados, número de autores e abstract de todos os artigos já publicados por um determinado periódico; contagem de citações recebidas e dadas; texto integral de artigos e resenhas em formato adequado para text mining; entre inúmeras outras. Todas essas informações são retiradas diretamente do repositório do Scielo e organizadas em formato de banco de dados (i.e. data.frame e tibble), facilitando a análise e exportação para qualquer formato.

Como usar

Usar o rscielo é bastante simples. Antes de mais nada, é necessário instalá-lo, o que pode ser feito a partir do console com:

install.packages("rscielo")

Alternativamente, use o seguinte código para instalar a versão pre-release no GitHub:

if(!require(remotes)) install.packages("remotes")
remotes::install_github("meirelesff/rscielo")

Com o pacote instalado, podemos extrair metadados de todos os artigos publicados na última edição de um periódico qualquer com a função get_journal. Por exemplo, o código a seguir retorna um banco com informações da última edição da Revista Brasileira de Ciência Política:

# Carrega o pacote
library(rscielo)

# Baixa dados da ultima edicao da RBCP
ult_edicao <- get_journal("0103-3352")
## 
## 
## Scraping data from: Revista Brasileira de Ciência Política
## 
## May take a while...

## 
## Done.

Poucos segundos depois, todos os metadados dos 8 artigos publicados na última edição da RBCP são recuperados. Ao todo, get_journal extrai 23 variáveis, incluindo nome das autoras, título dos artigos, abstract em diferentes línguas, número de páginas, entre outras informações úteis para análises bibliométricas e para revisões sistemáticas de literatura.

Para ter um panorama do banco, rscielo também inclui um método summary que pode ser usado assim:

summary(ult_edicao)
## 
## ### JOURNAL: Revista Brasileira de Ciência Política
## 
## 
##  Total number of articles:  8 
##  Total number of articles (reviews excluded):  7
## 
##  Mean number of authors per article:  2 
##  Mean number of pages per article:  31.29

A única informação que deve ser passada para get_journal, e para a maioria das outras do pacote, é o ISSN do periódico de interesse hospedado no Scielo. Caso não saiba como obter essa informação (o ISSN normalmente pode ser encontrado na home de cada periódico), use get_journal_list para obter uma lista de todos os periódicos mantidos pelo Scielo e seus respectivos ISSN.

get_journal_list()

Especificando o argumento last_issue = FALSE, também é possível usar get_journal para baixar metadados de todos os artigos já publicados por um periódico:

bpsr <- get_journal("0103-3352", last_issue = FALSE)

Outras funcionalidades

Artigos

Para além das funções _journal, o rscielo também permite pegar metadados, texto integral, referências bibliográficas e notas de rodapé de qualquer artigo hospedado na plataforma Scielo. Com a URL do artigo desejado, basta usar:

# Metadados de um artigo
get_article_meta("http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0103-33522019000100007")

#Texto de um artigo
get_article("http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0103-33522019000100007")

# Notas de um artigo
get_article_footnotes("http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0103-33522019000100007")

# Bibliografia de um artigo
get_article_references("http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0103-33522019000100007")

Em todas essas funções _article, também é possível passar o ID do artigo que se quer raspar. Nos exemplos acima, essa informação pode ser encontrada depois de &pid= (i.e., S0103-33522019000100007), ou obtida por meio da função get_article_id:

get_article_id("http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0103-33522019000100007")
## [1] "S0103-33522019000100007"

Por padrão, a função get_journal já retorna o ID de cada um dos artigos obtidos.

Citações

Para saber quantas citações um determinado periódico recebeu ou concedeu ao longo do tempo, o rscielo a função get_journal_metrics.

# Citacoes da RBCP
cit <- get_journal_metrics("0103-3352")

Com esses dados salvos, podemos usar o método plot para uma visualização rápida:

plot(cit)

Um resumo

Esses são alguns dos usos do rscielo para extrair dados e metadados de publicações. Para saber mais sobre ele funciona, consulte a documentação oficial e a home dele no Github, ou dê uma olhada na tabela abaixo, que resume o que cada uma de suas funções faz:

Função Dados Uso
get_article Conteúdo de artigos get_article(id_artigo)
get_article_footnotes Notas de artigos get_article_footnotes(id_artigo)
get_article_id ID de artigos get_article_id(url_artigo)
get_article_meta Metadados de artigos get_article_meta(id_artigo)
get_article_references Bibliografia de artigos get_article_references(id_artigo)
get_journal Metadados de artigos get_journal(issn)
get_journal_id ISSN de periódico get_journal_if(url_periodico)
get_journal_info Descrição de periódico get_journal_info(issn)
get_journal_metrics Citações de periódico get_journal_metrics(issn)
get_journal_lista Lista de periódico get_journal_list()

Sobre os dados

Enquanto trabalhávamos no rscielo, tivemos que lidar inúmeras vezes com informações incompletas e erros de formatação nos dados contidos na base do Scielo. Em muitos casos, isso ocorre por razões diretas – quando um periódico não inclui determinadas informações, ou quando as inclui sem seguir uma formatação adequada. Em outros casos, problemas podem ocorrer quando se tenta extrair o texto de um artigo apenas disponível em formato PDF, por exemplo. Por todas essas razões, cautela é necessária ao usar o rscielo em análises ou publicações.

Final

Com o rscielo, agora é possível obter em pouco tempo milhares de informações que podem ajudar pesquisadoras e estudantes a realizar análises bibliográficas, revisões sistemáticas, text minining aplicado à atividade científica, entre outros. Como essa é a primeira versão do rscielo, certamente ainda há bastante espaço para implementar novas funcionalidade e melhorar as já existentes. Críticas e sugestões, nesse sentido, são bem-vindas.

Avatar
Fernando Meireles
Postdoc in Political Science

Postdoctoral Fellow in Political Science at IESP-UERJ. Studying comparative politics and political methodology.