🚀 Automatize sua Revisão: Extração de BibTeX em massa do Springer com Python e ChatGPT
Realizar revisões sistemáticas ou construir um repositório bibliográfico de forma eficiente pode ser um desafio, especialmente quando os repositórios acadêmicos não oferecem exportação em lote das citações. Com base nessa dor real, desenvolvi — com apoio do ChatGPT — um script completo que automatiza a extração de referências do SpringerLink via RSS e as transforma em um arquivo .bib
pronto para uso no Rayyan, Zotero, Overleaf, entre outros.
Abaixo explico como funciona e como você pode executar o código em poucos minutos no Google Colab ou localmente no seu terminal.
🧠 O que o script faz?
- Acessa o RSS de busca do Springer com os filtros definidos (tema, data, idioma, tipo de publicação).
- Percorre várias páginas automaticamente (você define quantas).
- Extrai os DOIs de cada artigo publicado.
- Consulta a API do CrossRef usando content negotiation para obter o BibTeX.
- Salva tudo em um único arquivo
.bib
.
✅ Como rodar no Google Colab
- Acesse o Google Colab
- Crie um novo notebook e cole o código abaixo
- Rode célula por célula
- Faça o download do arquivo
.bib
gerado ao final
💻 Código completo
import requests
import xml.etree.ElementTree as ET
from tqdm import tqdm
def get_dois_from_rss(page_limit=10):
base_url = "https://link.springer.com/search.rss"
query_params = {
"new-search": "true",
"query": '( "process management" OR "business process management" ) AND ( "artificial intelligence" OR "AI" OR "machine learning" OR "deep learning" OR "neural networks" OR "generative AI" )',
"content-type": ["Conference Paper", "Article", "Research"],
"language": "En",
"date": "custom",
"dateFrom": "2020",
"dateTo": "2025",
"sortBy": "relevance"
}
all_dois = []
for page in range(1, page_limit + 1):
query_params["page"] = str(page)
print(f"🔄 Buscando página {page}...")
try:
response = requests.get(base_url, params=query_params)
if response.status_code != 200:
print(f"⚠️ Falha ao acessar página {page}: {response.status_code}")
break
root = ET.fromstring(response.content)
items = root.findall(".//item")
if not items:
print("🚫 Nenhum item encontrado. Parando paginação.")
break
for item in items:
guid = item.find("guid")
if guid is not None and guid.text.startswith("10."):
print(f"✅ DOI encontrado: {guid.text}")
all_dois.append(guid.text)
except Exception as e:
print(f"❌ Erro na página {page}: {e}")
break
return all_dois
def fetch_bibtex(dois):
bibtex_entries = []
headers = {"Accept": "application/x-bibtex"}
for doi in tqdm(dois, desc="🔃 Baixando BibTeX via CrossRef"):
try:
r = requests.get(f"https://doi.org/{doi}", headers=headers, timeout=10)
if r.status_code == 200:
bibtex_entries.append(r.text)
except Exception as e:
print(f"Erro ao buscar BibTeX para DOI {doi}: {e}")
return bibtex_entries
# 🔧 Executar
dois_coletados = get_dois_from_rss(page_limit=20)
bibtex_data = fetch_bibtex(dois_coletados)
# 💾 Salvar
with open("springer_all_pages.bib", "w", encoding="utf-8") as f:
for entry in bibtex_data:
f.write(entry + "\n\n")
print(f"\n✅ Arquivo gerado: springer_all_pages.bib ({len(bibtex_data)} entradas)")
📌 Personalize conforme sua busca
Você pode alterar facilmente:
- O termo da
query
(ex:"process mining"
ou"knowledge graph"
) - O intervalo de tempo (
dateFrom
,dateTo
) - O número de páginas (
page_limit=20
)
📎 Resultado
Ao final da execução, você terá um arquivo chamado:
springer_all_pages.bib
Pronto para subir no Rayyan, importar no Zotero ou usar em seu projeto em LaTeX.
🧠 Por que usar esse script?
- Evita o trabalho manual de baixar artigo por artigo.
- Garante alta confiabilidade (dados vindos direto da CrossRef).
- Ideal para quem faz revisão sistemática, mapeamento ou meta-análise.
Se quiser adaptar o script para outras bases com RSS, como IEEE Xplore ou PubMed, também é possível. E claro, o ChatGPT pode te ajudar nisso também. 😉