BibGetPDF
Da sua bibliografia .bib aos PDFs de acesso aberto, automaticamente.
Baixa automaticamente os PDFs de acesso aberto dos artigos de um arquivo
.bib. Para cada referência, consulta em sequência 10 fontes legítimas de
open access (Unpaywall, Semantic Scholar, OpenAlex, Europe PMC, PMC, arXiv,
CORE, DOAJ, SciELO e, opcionalmente, resolução de DOI por editora), valida se
o que baixou é mesmo um PDF e salva com um nome limpo no padrão
sobrenome-ano-titulo.pdf.
Entradas sem DOI são o maior motivo de artigos não encontrados (sem DOI,
quase toda fonte fica sem chave de busca). Por isso, antes de baixar, o script
tenta descobrir o DOI no Crossref pelo título + sobrenome do 1º autor —
aceitando o resultado só quando ele bate de verdade (título, autor e ano). Com
o DOI preenchido, as 10 fontes voltam a funcionar. (Desligue com
--no-doi-discovery.)
Ao final, gera um relatório HTML de diagnóstico que classifica o que não
foi baixado (bloqueio anti-bot, paywall real, erro de servidor, host que
bloqueou durante a execução) com links para download manual, e um
manifest.csv com uma linha por referência (para abrir no Excel).
Só usa fontes de acesso aberto. Não acessa Sci-Hub nem burla paywalls.
📖 Nunca usou (ou não lembra como)? O guia passo a passo, do zero até a pasta de PDFs — incluindo como abrir o Terminal e o que fazer quando algo dá errado — está em https://henriquealvarenga.com/bibgetpdf/#como-usar.
Requisitos
- Python 3.10 ou superior
Instalação
Instale com o pip (as dependências obrigatórias vêm junto):
pip install bibgetpdf
Para incluir os opcionais recomendados — unidecode (nomes de arquivo com
acentos) e beautifulsoup4 (melhora a extração de PDF de páginas HTML):
pip install "bibgetpdf[full]"
Isso cria o comando bibgetpdf. (A partir do código-fonte: clone o
repositório e rode pip install ., ou use python bibgetpdf.py direto —
nesse caso, instale as dependências com pip install bibtexparser requests.)
Configuração (obrigatória na primeira vez)
O script não contém nenhum dado pessoal. Antes do primeiro uso, você precisa informar um e-mail de contato — e, se quiser, a chave da API OpenAlex.
Você não precisa editar arquivo nenhum: o BibGetPDF pergunta e guarda sozinho. Na pasta onde você vai trabalhar, rode:
bibgetpdf --init
Ele faz duas perguntas no Terminal:
Seu e-mail: voce@exemplo.com
Chave da API OpenAlex — opcional, tecle Enter para pular.
Chave [Enter pula]:
✅ Pronto, salvo em: /Users/voce/Bibliografia/bibgetpdf.config
Não vou perguntar de novo — o arquivo é lido a cada execução.
E acabou — é só desta vez. As respostas ficam num bibgetpdf.config,
lido automaticamente a cada execução seguinte.
Se você rodar direto (
bibgetpdf --bib refs.bib) sem ter configurado nada, ele pergunta o e-mail na hora, salva e continua o download no mesmo comando — o--initsó existe para quem prefere deixar tudo pronto antes.
Os dois valores:
email(obrigatório) — qualquer e-mail válido seu. As APIs acadêmicas usam para identificar quem está fazendo as requisições (a Unpaywall exige um); em troca, tratam você com mais tolerância (o chamado polite pool). Pode ser um alias que encaminhe para o seu e-mail real.openalex_key(opcional) — a chave da API OpenAlex. É gratuita e leva um minuto: pegue a sua em https://openalex.org/settings/api. Desde 13/02/2026, sem a chave a fonte OpenAlex fica limitada a ~100 requisições/dia (as outras 9 fontes continuam funcionando normalmente). Para adicioná-la depois, rodebibgetpdf --initde novo e respondas.
O arquivo é procurado na pasta atual, em ~/.config/bibgetpdf/ e ao lado do
script — nessa ordem. Se preferir editá-lo à mão, o formato é chave = valor:
email = voce@exemplo.com
# openalex_key = sua-chave-openalex
(A partir do código-fonte há também o modelo bibgetpdf.config.exemplo,
que pode ser copiado com cp bibgetpdf.config.exemplo bibgetpdf.config.)
Sobre o formato das linhas:
- Os espaços em volta do
=são livres:email=x,email = xouemail = xdão no mesmo. - Não é preciso pôr o valor entre aspas nem entre colchetes
{}. Se por hábito do BibTeX você escreveremail = {voce@exemplo.com}, tudo bem — o script ignora as aspas/colchetes das bordas. - Linhas em branco e linhas começando com
#são ignoradas (comentários).
Alternativas ao arquivo
Cada valor pode vir de três lugares, nesta ordem de prioridade — linha de comando › variável de ambiente › arquivo:
| Valor | Linha de comando | Variável de ambiente | Arquivo (bibgetpdf.config) |
|---|---|---|---|
--email ... |
BIBGETPDF_EMAIL |
email = ... |
|
| Chave | --openalex-key ... |
OPENALEX_API_KEY |
openalex_key = ... |
No arquivo, os nomes das chaves aceitam apelidos comuns (ex.: chave_openalex
funciona igual a openalex_key), mas o recomendado é usar os nomes acima.
Uso
Dentro da pasta onde ficam o seu .bib e os PDFs:
bibgetpdf --bib references.bib --output PDFs
Na primeira vez, ele pergunta o seu e-mail antes de começar (e guarda a resposta). Das próximas, roda direto.
(A partir do código-fonte, o equivalente é
python bibgetpdf.py --bib references.bib --output PDFs.)
Opções úteis:
| Flag | O que faz |
|---|---|
--init |
Pergunta e-mail/chave e grava o bibgetpdf.config (primeiro uso ou alteração) |
--bib |
Arquivo .bib de entrada (padrão: references.bib) |
--output |
Pasta onde salvar os PDFs (padrão: PDFs) |
--threshold |
Rigor da comparação de títulos, 0–1 (padrão: 0.75; maior = mais estrito) |
--delay |
Pausa em segundos entre artigos (padrão: 3.0; aumente se já foi bloqueado) |
--doi-scrape |
Reativa a fonte que raspa páginas de editora (mais cobertura, mais risco de bloqueio; desligada por padrão) |
--no-doi-discovery |
Não descobrir DOI no Crossref para entradas sem DOI (ver abaixo; ligada por padrão) |
--use-doi-as-filename |
Nomear cada PDF pelo DOI (único) em vez de sobrenome-ano-titulo — útil para títulos ambíguos |
--no-report |
Não gerar o relatório HTML |
--no-probe |
No diagnóstico, não fazer requisições extras (classifica offline) |
Veja todas com bibgetpdf --help.
O que é gerado
Dentro da pasta de saída (PDFs/ por padrão):
- Os PDFs baixados, nomeados
sobrenome-ano-titulo.pdf(ou pelo DOI, com--use-doi-as-filename). relatorio.html— diagnóstico visual do que não baixou, com links para baixar manualmente (abra no navegador).manifest.csv— uma linha por referência: status, fonte, DOI (marcando os que foram descobertos no Crossref), motivo da falha. Abre no Excel/ LibreOffice para revisar o lote de uma vez.download_log.txt— log detalhado da execução.
O resume é automático: rodar de novo pula o que já foi baixado (revalidando cada PDF; arquivos corrompidos são baixados de novo).
Fluxo recomendado
Para bibliografias grandes, rende mais combinar com o Zotero:
- No Zotero, use "Find Available PDFs" para pegar o que ele já resolve.
- Exporte como
.bibapenas as referências que ficaram sem PDF. - Rode este script nesse
.bibreduzido.
Artigos que sobrarem em paywall real podem ser baixados pelo login institucional via Portal CAPES/CAFe (https://periodicos.capes.gov.br) — o relatório HTML já traz os links prontos.
Segurança das credenciais
O arquivo bibgetpdf.config contém a sua chave de API — não compartilhe e
não versione. O .gitignore do projeto já ignora esse arquivo; o que pode
ir para um repositório é o bibgetpdf.config.exemplo (só com placeholders).
Licença
Distribuído sob a licença MIT — veja o arquivo LICENSE. Você pode usar, modificar e redistribuir livremente, mantendo o aviso de copyright.
Como citar
Se este software foi útil na sua pesquisa, por favor cite-o:
Silva, H. A. (2026). BibGetPDF (v1.3.0) [Software]. Zenodo. https://doi.org/10.5281/zenodo.21536834
Em BibTeX (apropriado, já que a ferramenta lê .bib):
@software{silva_2026_21536834,
author = {Silva, Henrique Alvarenga},
title = {BibGetPDF},
month = aug,
year = 2026,
publisher = {Zenodo},
version = {v1.3.0},
doi = {10.5281/zenodo.21536834},
url = {https://doi.org/10.5281/zenodo.21536834},
}
DOI (todas as versões): 10.5281/zenodo.21536834
O GitHub também exibe um botão "Cite this repository" (gerado a partir do
CITATION.cff) com o formato pronto em APA e BibTeX.
Autor
Dr. Henrique Alvarenga — médico psiquiatra e professor do curso de Medicina da Universidade Federal de São João del-Rei (UFSJ), onde coordena as disciplinas de Psicopatologia e Psiquiatria. Atua na interface entre ciência, tecnologia, filosofia, comportamento e emoção, com interesse em análise de dados (R e Python) — terreno de onde nasceu esta ferramenta.
🔗 github.com/henriquealvarenga
Construído com o apoio do Claude Code (Anthropic).
Metadata
Release files for bibgetpdf 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bibgetpdf-1.3.0.tar.gz | 52.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bibgetpdf-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.6 kB
Release files / bibgetpdf-1.3.0.tar.gz
| Download URL | bibgetpdf-1.3.0.tar.gz |
|---|---|
| Size | 52.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
80b9c9b6e26e9ce666995bce348b0992725b6037be72f868dfc44b14b22347d8
|
|
BLAKE2b-256 checksum How to use checksums |
e5822cff0bb7f9fd9496c2cd127123840578ce1a3e2d6bc474bfd27207171be0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / bibgetpdf-1.3.0-py3-none-any.whl
| Download URL | bibgetpdf-1.3.0-py3-none-any.whl |
|---|---|
| Size | 53.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b5df6b0e35aeee2572b3d766095cd857e65b3ff9bcd6aa5c885010aa43da1ee0
|
|
BLAKE2b-256 checksum How to use checksums |
f00a286bb7b8f2e288b30a77d4b9b1c7415a560292ba396fc2757fac3c415386
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency log