Uma API não oficial para baixar papéis do Scihub.
# Download with a DOI and filenmae is the paper's title.
$ scidownl download --doi https://doi.org/10.1145/3375633
# Download with a PMID and a user-defined filepath
$ scidownl download --pmid 31395057 --out ./paper/paper-1.pdf
# Download with a title
$ scidownl download --title " ImageNet Classification with Deep Convolutional Neural Networks " --out ./paper/paper-1.pdf
# Download with a proxy: SCHEME=PROXY_ADDRESS
$ scidownl download --pmid 31395057 --out ./paper/paper-1.pdf --proxy http=socks5://127.0.0.1:7890
O SCIDOWNL pode ser facilmente instalado com o PIP.
$ pip3 install -U scidownl
$ git clone https://github.com/Tishacy/SciDownl.git
$ cd Scidownl && python3 setup.py install
$ scidownl -h
Usage: scidownl [OPTIONS] COMMAND [ARGS]...
Command line tool to download pdfs from Scihub.
Options:
-h, --help Show this message and exit.
Commands:
config Get global configs.
domain.list List available SciHub domains in local db.
domain.update Update available SciHub domains and save them to local db.
download Download paper(s) by DOI or PMID.
$ scidownl domain.update --help
Usage: scidownl domain.update [OPTIONS]
Update available SciHub domains and save them to local db.
Options:
-m, --mode TEXT update mode, could be ' crawl ' or ' search ' , default mode is
' crawl ' .
-h, --help Show this message and exit.
Existem 2 modos de atualização que você pode especificar com uma opção: -m
ou --mode
crawl
: [padrão] rastejando o site de domínios do SciHub atualizado em tempo real (também conhecido como fonte de domínio do SciHub) para obter os domínios SCIHUB disponíveis. O URL do site de origem do domínio do SciHub está configurado no arquivo de configuração global na seção [scihub.domain.updater.crawl]
com a chave de scihub_domain_source
. Você pode usar scidownl config --location
para mostrar a localização do arquivo de configuração global e editá -lo.
; Global config file: global.ini
; ...
[scihub.domain.updater.crawl]
scihub_domain_source = http://tool.yovisun.com/scihub
; ...
Um exemplo de uso do modo crawl
:
$ scidownl domain.update --mode crawl
[INFO] | 2022/03/07 21:07:50 | Found 6 valid SciHub domains in total: [ ' http://sci-hub.ru ' , ' http://sci-hub.se ' , ' https://sci-hub.ru ' , ' https://sci-hub.st ' , ' http://sci-hub.st ' , ' https://sci-hub.se ' ]
[INFO] | 2022/03/07 21:07:50 | Saved 6 SciHub domains to local db.
search
: Gere combinações de acordo com as regras dos domínios do SciHub e pesquise os domínios SCIHUB disponíveis. Isso levará mais tempo que o modo crawl
.
Um exemplo de uso do modo search
:
$ scidownl domain.update --mode search
[INFO] | 2022/03/07 21:08:44 | # Search valid SciHub domains from 1352 urls
[INFO] | 2022/03/07 21:08:48 | # Found a SciHub domain url: https://sci-hub.ru
[INFO] | 2022/03/07 21:08:48 | # Found a SciHub domain url: https://sci-hub.st
...
[INFO] | 2022/03/07 21:09:04 | Found 6 valid SciHub domains in total: [ ' https://sci-hub.ru ' , ' https://sci-hub.st ' , ...]
[INFO] | 2022/03/07 21:09:04 | Saved 6 SciHub domains to local db.
O SCIDOWNL usa o SQLite como o banco de dados local para armazenar todos os domínios do SciHub atualizados localmente. Você pode listar todos os domínios salvos do SciHub com o domain.list
do comando.list.
$ scidownl domain.list
+--------------------+----------------+---------------+
| Url | SuccessTimes | FailedTimes |
| --------------------+----------------+--------------- |
| http://sci-hub.ru | 0 | 0 |
| https://sci-hub.ru | 0 | 0 |
| https://sci-hub.st | 0 | 0 |
| http://sci-hub.st | 0 | 0 |
| https://sci-hub.se | 0 | 0 |
| http://sci-hub.se | 0 | 0 |
+--------------------+----------------+---------------+
Além da coluna de URL fácil de entender, a coluna SuccessTimes
é usada para gravar o número de downloads de papel bem-sucedidos usando este URL, e a coluna FailedTimes
é usada para gravar o número de downloads de papel com falha usando este URL. Essas duas colunas são usadas para calcular a prioridade de escolher um domínio do SciHub ao baixar papéis.
$ scidownl download --help
Usage: scidownl download [OPTIONS]
Download paper(s) by DOI or PMID.
Options:
-d, --doi TEXT DOI string. Specifying multiple DOIs is supported,
e.g., --doi FIRST_DOI --doi SECOND_DOI ...
-p, --pmid INTEGER PMID numbers. Specifying multiple PMIDs is supported,
e.g., --pmid FIRST_PMID --pmid SECOND_PMID ...
-t, --title TEXT Title string. Specifying multiple titles is
supported, e.g., --title FIRST_TITLE --title
SECOND_TITLE ...
-o, --out TEXT Output directory or file path, which could be an
absolute path or a relative path. Output directory
examples: /absolute/path/to/download/,
./relative/path/to/download/, Output file examples:
/absolute/dir/paper.pdf, ../relative/dir/paper.pdf.
If --out is not specified, paper will be downloaded
to the current directory with the file name of the
paper's title. If multiple DOIs or multiple PMIDs are
provided, the --out option is always considered as
the output directory, rather than the output file
path.
-u, --scihub-url TEXT Scihub domain url. If not specified, automatically
choose one from local saved domains. It's recommended
to leave this option empty.
-h, --help Show this message and exit.
Usando opção -d
ou --doi
para baixar papéis com doi, opção -p
ou --pmid
para baixar papéis com pmid e opção -t
ou --title
para baixar artigos com títulos. Você pode especificar essas opções por várias vezes e até misturar delas.
# with a single DOI
$ scidownl download --doi https://doi.org/10.1145/3375633
# with multiple DOIs
$ scidownl download --doi https://doi.org/10.1145/3375633 --doi https://doi.org/10.1145/2785956.2787496
# with a single PMID
$ scidownl download --pmid 31395057
# with multiple PMIDs
$ scidownl download --pmid 31395057 --pmid 24686414
# with a single title
$ scidownl download --title " ImageNet Classification with Deep Convolutional Neural Networks "
# with multiple titles
$ scidownl download --title " ImageNet Classification with Deep Convolutional Neural Networks " --title " Aggregated residual transformations for deep neural networks "
# with a mix of DOIs and PMIDs
$ scidownl download --doi https://doi.org/10.1145/3375633 --pmid 31395057 --pmid 24686414
Por padrão, o artigo baixado é nomeado pelo título do jornal. Com a opção -o
ou --out
, Você pode personalizar o local de saída de artigos baixados, o que pode ser um caminho absoluto ou um caminho relativo, e um caminho de direção ou um caminho de arquivo.
Emitir o PAEPR para um diretório:
$ scidownl download --pmid 31395057 --out /absolute/path/of/a/directory/
# NOTE that the '/' at the end of the directory path is required, otherwise the last segment will be treated as the filename rather than a directory.
$ scidownl download --pmid 31395057 --out ../relative/path/of/a/directory/
# The '/' at the end of the directory path is required too.
Saia o papel com o caminho do arquivo.
$ scidownl download --pmid 31395057 --out /absolute/dir/paper.pdf
$ scidownl download --pmid 31395057 --out ../relative/dir/paper.pdf
$ scidownl download --pmid 31395057 --out relative/dir/paper.pdf
$ scidownl download --pmid 31395057 --out paper # will be downlaoded as ./paper.pdf
Observe que, se houver mais de um documentos a serem baixados, o valor da opção --out
sempre será considerado um diretório, em vez de um caminho de arquivo.
$ scidownl download --pmid 31395057 --pmid 24686414 --out paper
# will be downloaded to ./paper/ directory:
# ./paper/<paper-title-1>.pdf
# ./paper/<paper-title-2>.pdf
Se alguns diretórios da opção não existirem, o Scidownl os criará para você?
Com a opção -u
ou --scihub-url
, você pode usar um URL específico do SciHub que deseja, em vez de deixar o Scidownl escolher automaticamente um para você dos domínios local salvo salvo. É recomendável deixar o SCIDOWNL escolher um URL do SCIHUB, para que você não precise usar essa opção em uso normal.
$ scidownl download --pmid 31395057 --scihub-url http://sci-hub.se
Você pode usar a função scihub_download
para baixar papéis.
from scidownl import scihub_download
paper = "https://doi.org/10.1145/3375633"
paper_type = "doi"
out = "./paper/one_paper.pdf"
proxies = {
'http' : 'socks5://127.0.0.1:7890'
}
scihub_download ( paper , paper_type = paper_type , out = out , proxies = proxies )
Mais exemplos podem ser vistos em exemplos.
Copyright (C) 2022 Tishacy.
Licenciado sob a licença do MIT.