O QGET é uma biblioteca licenciada do Apache2, escrita em Python, para baixar os recursos da Web da maneira assíncrona o mais rápido possível.
Sob o capô, ele se beneficia de asyncio e aiohttp para criar várias conexões simultâneas para recursos e baixá -lo usando arquivos de parte em buffer.
Índice
wget vs qgettqdm )chunk_bytes e max_part_mbasyncio por qget_coro Coroutinewget vs qget Considere um fragmento de configuração nginx simples como este:
http {
server {
...
limit_rate 5m ;
...
}
} Agora vamos comparar as estatísticas de download para wget e qget para arquivo de 1000 MB e configuração mencionada acima:
| Aplicativo | Tempo total (s] | Velocidade AVG [MB/S] | Detalhes |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16.00 | 95.97 | Teste de limite de conexão: 5.00s Download: 10.42s Reescrita de peças: 0,58s |
Conclusão :
Para limitação simples de taxa ( por conexão ), qget permite obter uma velocidade de download várias vezes mais rápida com base na velocidade da conexão com a Internet do usuário, número de solicitações simultâneas e configuração do servidor de recursos. No exemplo acima, qget alcançado com a velocidade de download de 24x de 24x de wget .
Para casos mais complicados ( por exemplo, o limite de conexões por IP ), foi criado um teste de medição de limite de conexão automático para calcular quantas solicitações simultâneas poderiam ser alcançadas antes que o servidor rejeite o próximo.
Você pode baixar arquivos binários selecionados de lançamentos. Versões disponíveis:
Para instalar o módulo qget , simplesmente:
$ pip install qgetVerifique se o Anaconda está instalado.
Para construir no Windows (no prompt de anaconda):
$ build.bat Para desenvolver os pacotes POSIX ( libc-bin e binutils , são necessários):
$ build.shArgumentos de função:
URL (STR): o URL para baixar o recurso.
FilePath (STR, opcional): caminho de saída para recursos baixados.
Se não estiver definido, aponta para o diretório de trabalho atual e o nome do arquivo da URL. Padrões para nenhum.
Substituir (bool, opcional): sinalizador se o arquivo de saída existente for substituído. Padrões para false.
auth (str, opcional): string de usuário: par de senha para conexão SSL. Padrões para nenhum.
Verify_ssl (bool, opcional): sinalizador se a validação do certificado SSL deve ser executada. Padrões para True.
Mock_browser (bool, opcional): sinalizador se o cabeçalho do agente do usuário deve ser adicionado à solicitação. Padrões para True.
String de agente de usuário padrão: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Applewebkit/537.36
(Khtml, como Gecko) Chrome/101.0.4951.67 Safari/537.36 '
proxy_url (str, opcional): http/socks4/socks5 URL proxy no formato 'protocolo: // user: senha@ip: porta'.
Padrões para nenhum.
Cabeçalhos: (dict [str, str], opcional): cabeçalhos personalizados a serem enviados. Padrão para nenhum.
Se o usuário definido puder especificar o próprio agente de usuário e os cabeçalhos, caso contrário, os padrões serão usados.
Progress_ref (ProgressState, opcional): referência ao estado do progresso.
Se aprovado, todas as peças bytes e o status de reescrita serão atualizadas nele. Padrões para nenhum.
max_connections (int, opcional): quantidade máxima de conexões HTTP assíncronas. Padrão para 50.
Connection_test_sec (int, opcional): tempo máximo em segundos atribuídos para testar
Quantas conexões assíncronas podem ser alcançadas com URL.
Se definido como 0, o teste será omitido. Padrões para 5.
chunk_bytes (int, opcional): pedaço de dados lido na iteração do URL e salve para separar o arquivo em bytes.
Será usado também ao reescrever peças para saída de arquivo. Se o limite for fornecido, isso pode ser substituído para
iteração do fluxo. Padrão para 2621440.
max_part_mb (float, opcional): desejável (se possível) tamanho da peça máxima em megabytes. Padrões para 5.
EXPETIRAS (INT, OPCIONAL): Número de tentativas para download de peça. Padrões para 10.
RETY_SEC (INT, Opcional): Hora de esperar entre tentativas de download de peça em segundos. Padrões para 1.
Limit (STR, Opcional): Limite de taxa de download no MBPS. Pode ser fornecido com unidade como "Nunit", por exemplo. "5m".
Unidades válidas (insensível ao caso): B, K, M, G, KB, MB, GB. 0 bytes serão tratados como nenhum limite.
Padrões para nenhum.
tmp_dir (str, opcional): caminho do diretório temporário. Se não estiver definido, aponta para o diretório TMP OS.
Padrões para nenhum.
Debug (Bool, opcional): sinalizador de depuração. Padrões para false.
Para usar no código, basta importar a função do módulo:
from qget import qget
url = "https://speed.hetzner.de/100MB.bin"
qget ( url ) Para usar em código com loop próprio e asyncio :
import asyncio
from qget import qget_coro
async def main ( loop ):
url = "https://speed.hetzner.de/100MB.bin"
download_task = loop . create_task ( qget_coro ( url ))
await download_task
# Or just
# await qget_coro(url)
loop = asyncio . get_event_loop ()
loop . run_until_complete ( main ( loop ))
loop . close () Uso para ganchos de progresso (por padrão ganchos são usados para exibir a barra de progresso tqdm ):
from qget import ProgressState , qget
def print_download_progress ( progress : ProgressState ) -> None :
print ( f"Download: { progress . get_download_progress ():.2f } %" , end = " r " )
if progress . get_download_bytes () == progress . total_bytes :
print ()
def print_rewrite_progress ( progress : ProgressState ) -> None :
print ( f"Rewrite: { progress . get_rewrite_progress ():.2f } %" , end = " r " )
if progress . rewrite_bytes == progress . total_bytes :
print ()
url = "https://speed.hetzner.de/100MB.bin"
progress = ProgressState (
on_download_progress = print_download_progress ,
on_rewrite_progress = print_rewrite_progress
)
qget ( url , progress_ref = progress ) Uso: qget [-h] [-o filepath] [-f] [-a auth] [--no-verify] [--no-mock]
[--proxy proxy_url] [-h cabeçalho] [-c max_connections]
[--Test Connection_Test_Sec] [--bytes chunk_bytes] [---part max_part_mb]
[--Retries Betes] [--Rety_sec retry_sec] [-limite-limit] [--tmp tmp_dir]
[--debug] [-v]
url
Downloads recursos de URL fornecido em peças tamponadas usando conexões HTTP assíncronas
com sessão AIOHTTP.
Argumentos posicionais:
URL URL de recurso
Opções:
-h, --help Mostra esta mensagem de ajuda e saída
-o filepath, -output filepath
Caminho de saída para recurso baixado.
-f, -Forças de force Substituição de arquivo para saída.
-A AUTH, -AUTH AUTH STRING DO USUÁRIO: PAI PASSAÇÃO PARA CONEXÃO SSL.
-Não-verify Desativa a validação do certificado SSL.
-Não mock desativa o cabeçalho do agente do usuário padrão.
--proxy proxy_url http/socks4/socks5 URL proxy em formato
'Protocolo: // Usuário: senha@ip: porta'.
-H cabeçalho, -cabeçalho do cabeçalho
Cabeçalho personalizado no formato 'Nome: Valor'. Pode ser fornecido múltiplo
vezes.
-c max_connections, -Connections max_connections
Quantidade máxima de conexões HTTP assíncronas.
--Test Connection_Test_Sec
Tempo máximo em segundos atribuídos para testar o quanto assíncrono
As conexões podem ser alcançadas com o URL. Use 0 para pular.
-bytes chunk_bytes pedaço de dados lidos na iteração do URL e salvar para separar o arquivo
bytes. Será usado também ao reescrever peças para saída de arquivo.
-Parte max_part_mbs desejável (se possível) tamanho da peça máxima em megabytes.
-Retries Bottrieds Botties Número para download de peça.
--Rety_sec RETY_SEC Tempo para esperar entre as tentativas de download de peça em segundos.
-Limite limite Limite de taxa de download Limite de MBPS. Pode ser fornecido com unidade como 'freira',
por exemplo. '5m'. Unidades válidas (insensível ao caso): B, K, M, G, KB, MB, GB.
0 bytes serão tratados como nenhum limite.
-TMP TMP_DIR PATH DIRETÓRIO TEMPORÁRIO. Se não estiver definido, aponta para o OS TMP
diretório.
-Debug Debug Flag.
-v, --version Exibe a versão real do QGET.
Pode ser usado também no módulo Python com os mesmos argumentos que para binário:
python -m qget https://speed.hetzner.de/100MB.binVários cabeçalhos podem ser fornecidos da seguinte forma:
python -m qget -H ' name1:value1 ' -H ' name2:value2 ' https://speed.hetzner.de/100MB.bin O limiter tenta reduzir a taxa de bytes baixados adicionando pausas entre a iteração sobre o conteúdo de recursos. Se a taxa de download muito baixa for solicitada, tente diminuir o valor das conexões ( max_connections ou --connections MAX_CONNECTIONS ) para obter melhor precisão para o limite.
O tamanho da peça é calculado no tempo de execução com base no tamanho do recurso em bytes e quantidade máxima de conexões assíncronas definidas pelo usuário (ou teste de conexão). Param de tamanho da peça máxima ( max_part_mb ou --part MAX_PART_MB ) fornecido pelo usuário é usado como um limite superior para o valor calculado.
part_bytes = min (Resource_Bytes/Connections, max_part_bytes)