Sam*_*lor 6 python urllib download urllib2
如何使用python下载包含进度报告的文件但不提供文件名.
我已经尝试了urllib.urlretrieve,但我似乎必须提供下载文件的文件名以保存为.
例如:
我不想提供这个:
urllib.urlretrieve("http://www.mozilla.com/products/download.html?product=firefox-3.6.3&os=win&lang=en-US", "/tmp/firefox.exe")
Run Code Online (Sandbox Code Playgroud)
只是这个:
urllib.urlretrieve("http://www.mozilla.com/products/download.html?product=firefox-3.6.3&os=win&lang=en-US", "/tmp/")
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,我会收到此错误:
IOError: [Errno 21] Is a directory: '/tmp'
Run Code Online (Sandbox Code Playgroud)
也无法从某个URL获取文件名示例:
http://www.mozilla.com/products/download.html?product=firefox-3.6.3&os=win&lang=en-US
Iva*_*aev 11
这是在python3中完成它的完整方法,并且在url中没有指定文件名:
from urllib.request import urlopen
from urllib.request import urlretrieve
import cgi
url = "https://www.gstatic.com/webp/gallery3/2.png"
remotefile = urlopen(url)
blah = remotefile.info()['Content-Disposition']
value, params = cgi.parse_header(blah)
filename = params["filename"]
urlretrieve(url, filename)
Run Code Online (Sandbox Code Playgroud)
问题澄清后编辑......
urlparse.urlsplit将获取您正在打开的URL并将其拆分为其组成部分,然后您可以获取该path部分并使用最后一个/分隔的块作为文件名.
import urllib, urlparse
split = urlparse.urlsplit(url)
filename = "/tmp/" + split.path.split("/")[-1]
urllib.urlretrieve(url, filename)
Run Code Online (Sandbox Code Playgroud)