2016-12-24 4 views
0

ich zur Zeit diesen Code verwende (Python 3.5.2):Picking Dateipfad und den Dateinamen mit Asynchron-Datei herunterladen

from multiprocessing.dummy import Pool 
from urllib.request import urlretrieve 

urls = ["link"] 
result = Pool(4).map(urlretrieve, urls) 
print(result[0][0]) 

Es funktioniert, aber wird in die temporäre Datei mit einem komischen Namen gespeichert, gibt es eine Möglichkeit, einen Dateipfad und möglicherweise einen Dateinamen auszuwählen? Sowie eine Dateierweiterung hinzufügen, wird es ohne eine Dateierweiterung gespeichert.

Danke!

Antwort

0

Sie müssen einfach einen Standort an urlretrieve liefern. pool.map scheint jedoch nicht mehrere Argumente in Funktionen zu unterstützen (Python multiprocessing pool.map for multiple arguments). So können Sie, wie dort beschrieben, refaktorieren oder ein anderes Multiprozessor-Grundelement verwenden, z. Process:

from multiprocessing import Process 
from urllib.request import urlretrieve 

urls = ["link", "otherlink"] 
filenames = ["{}.html".format(i) for i in urls] 
args = zip(urls, filenames) 
for arg in args: 
    p = Process(urlretrieve, arg) 
    p.start() 

In den Kommentaren sagen, Sie nur 1 URL herunterladen müssen. In diesem Fall ist es sehr einfach:

from urllib.request import urlretrieve 
urlretrieve("https://yahoo.com", "where_to_save.html") 

Dann wird die Datei in where_to_save.html gespeichert werden. Sie können dort selbstverständlich einen vollständigen Pfad angeben, z. /where/exactly/to/save.html.

+0

Ich habe eine Erhöhung erhalten URLError ('unbekannter URL Typ:% s'% Typ) urllib.error.URLError:

+0

Eigentlich bekam ich Fehler zu.Ich dachte, das hätte hat funktioniert. Siehe Bearbeiten. – rofls

+0

Der Kern Ihres Problems ist, dass Sie einen Dateinamen an "urlretrieve" übergeben müssen. – rofls

Verwandte Themen