Qget es una biblioteca con licencia de Apache2, escrita en Python, para descargar recursos web de manera asincrónica lo más rápido posible.
Debajo del capó se beneficia de asyncio y aiohttp para crear múltiples conexiones simultáneas a los recursos y descargarlo utilizando archivos de pieza almacenados.
Tabla de contenido
wget vs qgettqdm )chunk_bytes y max_part_mbasyncio por qget_coro Coroutinewget vs qget Considere el fragmento de configuración nginx simple como este:
http {
server {
...
limit_rate 5m ;
...
}
} Ahora comparemos las estadísticas de descarga para wget y qget para el archivo y la configuración de 1000 MB mencionados anteriormente:
| Solicitud | Tiempo total [s] | AVG Speed [MB/S] | Detalles |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16.00 | 95.97 | Prueba de límite de conexión: 5.00s Descargar: 10.42s Las piezas reescriben: 0.58s |
Conclusión :
Para limitar la velocidad simple ( por conexión ), qget permite lograr una velocidad de descarga varias veces más rápida basada en la velocidad de conexión a Internet del usuario, el número de solicitudes simultáneas y la configuración del servidor de recursos. En el ejemplo anterior, qget logró más de 24x Velocidad de descarga de wget .
Para casos más complicados ( por ejemplo, el límite de conexiones por IP ) se creó la prueba de medición de límite de conexión automática para calcular cuántas solicitudes simultáneas podrían lograrse antes de que el servidor rechace el próximo.
Puede descargar archivos binarios seleccionados de los lanzamientos. Versiones disponibles:
Para instalar el módulo qget , simplemente:
$ pip install qgetAsegúrese de que se instale Anaconda.
Para construir en Windows (en el aviso de Anaconda):
$ build.bat Para construir sobre POSIX (se requieren paquetes de binutilos libc-bin y binutils ):
$ build.shArgumentos de función:
URL (STR): la URL para descargar el recurso.
FilePath (STR, Opcional): ruta de salida para recursos descargados.
Si no, establece que puntos en el directorio de trabajo actual y el nombre de archivo de la URL. Predeterminado no a ninguno.
anular (bool, opcional): indicador si el archivo de salida existente debe ser anulado. El valor predeterminado es falso.
Auth (str, opcional): cadena de usuario: par de contraseñas para la conexión SSL. Predeterminado no a ninguno.
Verify_ssl (bool, opcional): indicador si se debe realizar la validación del certificado SSL. El valor predeterminado es verdadero.
mock_browser (bool, opcional): indicador si se debe agregar encabezado de agente de usuario para solicitar. El valor predeterminado es verdadero.
Cadena predeterminada de agente de usuario: '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 en formato 'protocolo: // user: contraseña@ip: puerto'.
Predeterminado no a ninguno.
Encabezados: (dict [str, str], opcional): encabezados personalizados que se enviarán. Predeterminado a ninguno.
Si el usuario set puede especificar el propio agente de usuario y aceptar encabezados, de lo contrario se utilizarán los valores predeterminados.
Progress_ref (ProgressState, opcional): referencia al estado de progreso.
Si se pasa, todas las partes bytes y el estado de reescritura se actualizará en él. Predeterminado no a ninguno.
max_connections (int, opcional): cantidad máxima de conexiones HTTP asíncronas. Predeterminado a 50.
Connect_test_sec (int, opcional): tiempo máximo en segundos asignados para probar
Cuántas conexiones asíncronas se pueden lograr a la URL.
Si se establece en 0, se omitirá la prueba. El valor predeterminado a 5.
Chunk_Bytes (int, opcional): fragmento de datos leídos en iteración de URL y guardado para parte del archivo en bytes.
Se utilizará también al reescribir piezas al archivo de salida. Si se suministra el límite, esto se puede anular para
iteración de transmisión. El valor predeterminado es 2621440.
max_part_mb (float, opcional): deseable (si es posible) tamaño de pieza máxima en megabytes. El valor predeterminado a 5.
reintentos (int, opcional): número de reintentos para descargar parte. El valor predeterminado a 10.
RETRY_SEC (int, opcional): tiempo para esperar entre reintentos de descarga de parte en segundos. Predeterminado es 1.
Límite (STR, Opcional): Límite de tasa de descarga en MBPS. Se puede suministrar con la unidad como "Nunit", por ejemplo. "5m".
Unidades válidas (insensible a la caja): B, K, M, G, KB, MB, GB. 0 bytes serán tratados como un límite.
Predeterminado no a ninguno.
tmp_dir (str, opcional): ruta de directorio temporal. Si no, configúrelo, apunta al directorio OS TMP.
Predeterminado no a ninguno.
Debug (bool, opcional): bandera de depuración. El valor predeterminado es falso.
Para usar en el código simplemente importe la función del módulo:
from qget import qget
url = "https://speed.hetzner.de/100MB.bin"
qget ( url ) Para usar en código con su propio bucle y 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 los ganchos de progreso (los ganchos de forma predeterminada se utilizan para mostrar la barra de progreso 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 encabezado] [-c max_connections]
[--test Connects_test_sec] [---Bytes chunk_bytes] [--Part max_part_mb]
[-RETRIES RETRIES] [--RETRY_SEC RETRY_SEC] [-LIMITO LIMIT] [-TMP TMP_DIR]
[--debug] [-v]
url
Recurso de descargas de URL dada en piezas buffadas utilizando conexiones HTTP asíncronas
con sesión AIOHTTP.
Argumentos posicionales:
URL URL de recursos
Opciones:
-h, --help muestra este mensaje de ayuda y salida
-o filepath, -output filepath
Ruta de salida para recursos descargados.
-f, -Force Force Anexo de archivo para la salida.
-A Auth, -Auth Auth String of User: Password Par para la conexión SSL.
--No-Verify deshabilita la validación del certificado SSL.
--no-mock deshabilita el encabezado predeterminado de agente de usuario.
--proxy proxy_url http/socks4/socks5 url proxy en formato
'Protocol: // Usuario: Password@IP: Port'.
-H encabezado, -encabezado de cabeza
Encabezado personalizado en formato 'Nombre: Valor'. Se puede suministrar múltiples
veces.
-C max_connections, - -Connections max_connections
Cantidad máxima de conexiones HTTP asincrónicas.
-test Connection_test_sec
Tiempo máximo en segundos asignados para probar cuánto asíncrono
Las conexiones se pueden lograr a la URL. Use 0 para omitir.
--Bytes Chunk_Bytes de datos leídos en iteración de URL y guarda al archivo parcial en
bytes. Se utilizará también al reescribir piezas al archivo de salida.
--Part max_part_mb deseable (si es posible) tamaño de pieza máxima en megabytes.
-El número de reintentos de requisitos para la descarga parcial.
--Rets_SEC RETRY_SEC TIEMPO para esperar entre reintentos de descarga de parte en segundos.
-Límite límite de límite de descarga Límite en MBPS. Se puede suministrar con unidad como 'nunit',
p.ej. '5m'. Unidades válidas (insensible a la caja): B, K, M, G, KB, MB, GB.
0 bytes serán tratados como un límite.
-tmp tmp_dir ruta de directorio temporal. Si no se establece, apunta a OS TMP
directorio.
-Bandera de depuración-debug.
-v, -Version muestra la versión real de Qget.
Se puede usar también del módulo Python con los mismos argumentos que para el binario:
python -m qget https://speed.hetzner.de/100MB.binSe pueden suministrar múltiples encabezados de la siguiente manera:
python -m qget -H ' name1:value1 ' -H ' name2:value2 ' https://speed.hetzner.de/100MB.bin Limiter intenta reducir la tasa de bytes descargados agregando pausas entre la iteración sobre el contenido de recursos. Si se solicita una tasa de descarga muy baja, intente reducir la cantidad de conexiones ( max_connections o --connections MAX_CONNECTIONS ) para lograr una mejor precisión para el límite.
El tamaño de la pieza se calcula en tiempo de ejecución en función del tamaño de los recursos en bytes y la cantidad máxima de conexiones asincrónicas establecidas por el usuario (o prueba de conexión). MAX PIEZA TAMAÑO param ( max_part_mb o --part MAX_PART_MB ) suministrado por el usuario se usa como un límite superior para el valor calculado.
Part_Bytes = Min (Resource_Bytes/Connections, max_part_bytes)