QGET ist eine in Python geschriebene Apache2 -lizenzierte Bibliothek, um Webressourcen so schnell wie möglich auf asynchrone Weise herunterzuladen.
Unter der Haube profitiert es von asyncio und aiohttp , um mehrere gleichzeitige Verbindungen zur Ressource zu erstellen und sie mit gepufferten Teildateien herunterzuladen.
Inhaltsverzeichnis
wget gegen qgettqdm )chunk_bytes und max_part_mbasyncio von qget_coro Coroutinewget gegen qget Betrachten Sie ein einfaches nginx -Konfigurationsfragment wie folgt:
http {
server {
...
limit_rate 5m ;
...
}
} Vergleichen wir nun Download -Statistiken für wget und qget für 1000 -MB -Datei und -konfiguration, die oben erwähnt wurden:
| Anwendung | Gesamtzeit [s] | AVG -Geschwindigkeit [MB/s] | Details |
|---|---|---|---|
wget | 251.34 | 3.98 | |
qget | 16.00 | 95.97 | Verbindungsbegrenzungstest: 5.00s Download: 10.42s Teile umschreiben: 0,58s |
Abschluss :
Für die einfache Rate -Limiting ( pro Verbindung ) ermöglicht qget die mehrmalige schnellere Download -Geschwindigkeit basierend auf der Internetverbindungsgeschwindigkeit, der Anzahl der gleichzeitigen Anforderungen und der Konfiguration des Ressourcenservers. In Beispiel oben ist qget über 24 -fache Download -Geschwindigkeit von wget erreicht.
Für kompliziertere Fälle ( z. B. Verbindungsgrenze pro IP ) wurde ein automatischer Verbindungsgrenze -Messungstest erstellt, um zu berechnen, wie viele gleichzeitige Anforderungen gestellt werden könnten, bevor der Server die nächste ablehnt.
Sie können ausgewählte Binärdateien von Veröffentlichungen herunterladen. Verfügbare Versionen:
So installieren Sie qget -Modul einfach:
$ pip install qgetStellen Sie sicher, dass Anaconda installiert ist.
Um auf Fenstern zu bauen (in Anaconda -Eingabeaufforderung):
$ build.bat Um auf POSIX aufzubauen ( libc-bin und binutils Pakete sind erforderlich):
$ build.shFunktionsargumente:
URL (STR): Die URL zum Herunterladen der Ressource.
Filepath (STR, optional): Ausgabepfad für heruntergeladene Ressource.
Wenn Sie es nicht auf das aktuelle Arbeitsverzeichnis und den Dateinamen aus der URL festlegen. Standardmäßig keine.
Override (bool, optional): Flag, wenn vorhandene Ausgabedatei überschrieben werden soll. Standardmäßig falsch.
Auth (str, optional): Benutzerzeichenfolge: Kennwortpaar für die SSL -Verbindung. Standardmäßig keine.
verify_ssl (bool, optional): Flag, wenn die SSL -Zertifikatvalidierung durchgeführt werden sollte. Standardmäßig true.
mock_browser (bool, optional): Flag, wenn der Benutzer-Agent-Header hinzugefügt werden sollte, um anzufordern. Standardmäßig true.
Standard-Benutzer-Agent-Zeichenfolge: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Applewebkit/537.36
(KHTML, wie Gecko) Chrome/101.0.4951.67 Safari/537.36 '
proxy_url (str, optional): http/socks4/socks5 Proxy -URL in Format 'Protocol: // Benutzer: Passwort@ip: port'.
Standardmäßig keine.
Header: (DICT [STR, STR], optional): benutzerdefinierte Headers zu senden. Standardmäßig keine.
Wenn ein festgelegter Benutzer eigene Benutzer angeben und Header akzeptieren, werden ansonsten Standardeinstellungen verwendet.
Progress_ref (Progressstate, Optional): Verweis auf den Fortschrittszustand.
Wenn alle Teile Bytes übergeben werden und der Umschreibstatus in ihm aktualisiert wird. Standardmäßig keine.
max_connections (int, optional): maximale Menge an asynchronen HTTP -Verbindungen. Standardeinstellung auf 50.
Connection_test_sec (int, optional): Höchstzeit in Sekunden zum Test zugewiesen
Wie viel asynchrone Verbindungen kann für URL erreicht werden.
Wenn auf 0 Test eingestellt wird, wird der Test weggelassen. Standardeinstellung auf 5.
Chunk_Bytes (int, optional): Datenanteil in der Iteration von URL und speichern, um die Datei in Bytes zu trennen.
Wird auch verwendet, wenn Teile umgeben, um die Datei auszugeben. Wenn die Grenze geliefert wird, kann dies für eine Übersteuerung für
Stream -Iteration. Standardeinstellungen zu 2621440.
MAX_PART_MB (float, optional): wünschenswert (wenn möglich) MAX -Teilgröße in Megabyte. Standardeinstellung auf 5.
Abrufen (int, optional): REPRIES -Nummer für einen Teil -Download. Standardeinstellung auf 10.
retry_sec (int, optional): Zeit zum Warten zwischen den Abholungen des Teils in Sekunden. Standardmäßig 1.
Limit (STR, Optional): Download -Ratenlimit in Mbps. Kann mit Einheit als "Nunit" geliefert werden, z. "5m".
Gültige Einheiten (Fall unempfindlich): B, K, M, G, KB, MB, GB. 0 Bytes werden als keine Grenze behandelt.
Standardmäßig keine.
tmp_dir (str, optional): Temporärer Verzeichnispfad. Wenn Sie es nicht auf das OS -TMP -Verzeichnis festlegen.
Standardmäßig keine.
Debugg (bool, optional): Debug -Flagge. Standardmäßig falsch.
Um im Code zu verwenden, importieren Sie einfach Modulfunktion:
from qget import qget
url = "https://speed.hetzner.de/100MB.bin"
qget ( url ) In Code mit eigener Schleife und asyncio verwenden:
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 () Verwendung für Fortschrittshaken (standardmäßig werden Hooks verwendet, um tqdm -Fortschrittsleiste anzuzeigen):
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 ) Verwendung: qget [-h] [-o filepath] [-f] [-a auth] [-no-uverify] [--no-mock]
[--Proxy proxy_url] [-H-Header] [-c max_connections]
[-Test Connection_test_sec] [-Bytes Chunk_Bytes] [-Part MAX_PART_MB]
[-Retries Retries] [---rry_sec retry_sec] [-limit limit] [--tmp tmp_dir]
[-Debug] [-V]
URL
Downloads Ressource aus der angegebenen URL in gepufferten Teilen mit asynchronen HTTP -Verbindungen
mit AIOHTTP -Sitzung.
Positionsargumente:
URL -URL der Ressource
Optionen:
-h, -HELP Zeigen Sie diese Hilfsnachricht an und beenden Sie
-o filepath, -Ausgangsfilepath
Ausgangspfad für heruntergeladene Ressource.
-F, -Force Forces -Dateiüberschreibung für die Ausgabe.
-a Auth, --Auth Auth Auth -Zeichenfolge von Benutzern: Kennwortpaar für die SSL -Verbindung.
-Nicht-Verifizierung deaktiviert die Validierung des SSL-Zertifikats.
-no-mock deaktiviert den Standard-Benutzer-Agent-Header.
--Proxy Proxy_url http/Socken4/Socken5 Proxy-URL im Format
'Protocol: // Benutzer: Passwort@ip: port'.
-H Header, -leader -Header
Benutzerdefinierte Header in Format 'Name: Wert'. Kann mehrere geliefert werden
mal.
-c max_connections, -bonitionen max_connections
Maximale Menge an asynchronen HTTP -Verbindungen.
-Test Connection_test_sec
Maximale Zeit in Sekunden zugewiesen, um zu testen, wie viel asynchron ist
Verbindungen können zu URL erreicht werden. Verwenden Sie 0, um zu überspringen.
-Bytes Chunk_Bytes-Datenanteil von Daten, die in der Iteration von der URL von der URL gelesen werden, und speichern Sie, um die Datei in die Datei zu trennen
Bytes. Wird auch verwendet, wenn Teile umgeben, um die Datei auszugeben.
-Teil max_part_mb wünschenswert (wenn möglich) maximaler Teilgröße in Megabyte.
-RETRIES REPRIES REPRIES NUMMER FÜR TEIL DOWNLOAD.
-Retry_sec Retry_sec Zeit, um zwischen den Abholungen des Teils in Sekunden herunterzuladen.
-Limit Limit Download Rate Limit in MBPs. Kann mit Einheit als "Nunit" geliefert werden,
z.B. '5m'. Gültige Einheiten (Fall unempfindlich): B, K, M, G, KB, MB, GB.
0 Bytes werden als keine Grenze behandelt.
-TMP TMP_DIR Temporärer Verzeichnispfad. Wenn Sie es nicht auf OS TMP einstellen
Verzeichnis.
-Debug-Debug-Flagge.
-V, --version zeigt die tatsächliche Version von QGET an.
Kann auch vom Python -Modul mit denselben Argumenten wie für binäre Verwendung verwendet werden:
python -m qget https://speed.hetzner.de/100MB.binMehrere Header können wie folgt geliefert werden:
python -m qget -H ' name1:value1 ' -H ' name2:value2 ' https://speed.hetzner.de/100MB.bin Der Limiter versucht, die Rate von heruntergeladenen Bytes durch Hinzufügen von Pausen zwischen der Iteration über Ressourceninhalte zu senken. Wenn eine sehr niedrige Download -Rate angefordert wird, versuchen Sie, die Verbindungen zu senken ( max_connections oder --connections MAX_CONNECTIONS ), um eine bessere Genauigkeit für die Grenze zu erreichen.
Die Teilgröße wird in der Laufzeit basierend auf der Ressourcengröße in Bytes und der maximalen Menge an asynchronen Verbindungen berechnet, die vom Benutzer (oder des Verbindungstests) festgelegt wurden. MAX -Teilgröße Param ( max_part_mb oder --part MAX_PART_MB ) vom Benutzer geliefert wird als oberes Limit für den berechneten Wert.
part_bytes = min (Ressourcen_Bytes/Verbindungen, max_part_bytes)