2016-12-24 53 views
0

採摘文件路徑,並與異步文件下載文件名我目前使用此代碼(蟒蛇3.5.2)

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

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

它的工作原理,但被保存到一些奇怪的名字的臨時文件,是否有一種選擇文件路徑和可能的文件名的方法?以及添加一個文件擴展名,它會被保存而沒有一個。

謝謝!

回答

0

您只需提供一個位置至urlretrieve即可。但pool.map似乎不支持函數中的多個參數(Python multiprocessing pool.map for multiple arguments)。因此,您可以按照此處所述進行重構,或者使用不同的多處理原語,例如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() 

在評論中你說你只需要下載1個url。在這種情況下,它很容易:

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

然後該文件將被保存在where_to_save.html。您當然可以在那裏提供完整的路徑,例如/where/exactly/to/save.html

+0

我確實得到了一個URLError('未知的url類型:%s'%類型) urllib.error.URLError:

+0

其實我的錯誤也是。工作。請參閱編輯。 – rofls

+0

你的問題的核心是你需要傳遞一個文件名到'urlretrieve'。 – rofls