当我运行这个时
wget.download("http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB")
它显示此错误代码
File "C:Program FilesPython39liburllibrequest.py", line 641, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)urllib.error.HTTPError: HTTP Error 404: Not Found
但当我手动运行wget http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB
时,运行得非常好
我调查了wget.download
源代码,似乎有一个错误,源代码
if PY3K:
# Python 3 can not quote URL as needed
binurl = list(urlparse.urlsplit(url))
binurl[2] = urlparse.quote(binurl[2])
binurl = urlparse.urlunsplit(binurl)
else:
binurl = url
所以它假设URL需要引用非法字符,比如%
符号后的代码取代的空格,但这已经完成了,因为您的URL包含%20
而不是空格。您的URL被更改,尽管它不应该
import urllib.parse as urlparse
url = "http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB"
binurl = list(urlparse.urlsplit(url))
binurl[2] = urlparse.quote(binurl[2])
binurl = urlparse.urlunsplit(binurl)
print(binurl) # http://downloads.dell.com/FOLDER06808437M/1/7760%2520AIO-WIN10-A11-5VNTG.CAB
您可以通过以需要转义的形式提供URL来平衡这个问题,在这种情况下是
import wget
wget.download("http://downloads.dell.com/FOLDER06808437M/1/7760 AIO-WIN10-A11-5VNTG.CAB")
xor使用urllib.request.urlretrieve
,最基本的形式是
import urllib.request
urllib.request.urlretrieve("http://downloads.dell.com/FOLDER06808437M/1/7760%20AIO-WIN10-A11-5VNTG.CAB", "776 AIO-WIN10-A11-5VNTG.CAB")
其中参数是URL和文件名。请记住,使用这种方式时没有进度指示器(栏(,因此您需要等待下载完成。