python - urllib.request.urlretrieve 抛出意外异常未知 url 类型:“”
python - urllib.request.urlretrieve throws unexpected exception unknown url type: ' '
我正在尝试使用 urllib.request.retrieve()
下载文件
我用的是Python3,下载成功了,不知道为什么会抛出异常
由于某种原因它抛出异常。
这是主文件:
import os
import urllib.request
zip_file_open = open("urls.txt")
if not os.path.exists('zip'):
os.makedirs('zip')
num=1
true = True
b = true
for i in zip_file_open.read().splitlines():
try:
print(str(i))
#response = urllib.request.urlopen(str(i))
#print(response)
#html = response.read()
urllib.request.urlretrieve(i, "zip/code"+str(num)+".zip")
if(b):
num+=1
b=False
else:
b=true
except Exception as e:
print("Exception: "+str(e))
if(b):
num+=1
b=False
else:
b=true
这是urls.txt:
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c01_code.zip
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c02_code.zip
........
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c25_code.zip
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c26_code.zip
以下是我创建 txt 文件的方式:
f = open("urls.txt","w")
k = """http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c"""
k1 = """_code.zip"""
import os
for i in range(26):
if(i<9):
f.write(k+str(0)+str(i+1)+k1+os.linesep)
else:
f.write(k+str(i+1)+k1+os.linesep)
f.close()
这是输出
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c01_code.zip
Exception2: unknown url type: ''
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c02_code.zip
Exception3: unknown url type: ''
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c03_code.zip
Exception3: HTTP Error 404: Not Found
........
Exception26: unknown url type: ''
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c26_code.zip
Exception27: unknown url type: ''
我没有包括所有的输出行,因为它们是一样的。该代码可以正常运行,但我想知道我们是否可以删除异常。
您的文件中似乎有一些空行,因此当您尝试获取 ''
时 urllib
抛出 ValueError
异常,这显然不是 [=24] =].
如果您在循环中添加一个条件来检查空字符串,则可以修复此错误。
for i in zip_file_open.read().splitlines():
if not i.strip():
continue
...
但这不适用于非 url 的非空字符串,例如 'not a url'
.
更好的方法是用 urlparse
.
检查 url 方案
for i in zip_file_open.read().splitlines():
if not urllib.parse.urlparse(i).scheme:
continue
...
我正在尝试使用 urllib.request.retrieve()
下载文件我用的是Python3,下载成功了,不知道为什么会抛出异常
由于某种原因它抛出异常。
这是主文件:
import os
import urllib.request
zip_file_open = open("urls.txt")
if not os.path.exists('zip'):
os.makedirs('zip')
num=1
true = True
b = true
for i in zip_file_open.read().splitlines():
try:
print(str(i))
#response = urllib.request.urlopen(str(i))
#print(response)
#html = response.read()
urllib.request.urlretrieve(i, "zip/code"+str(num)+".zip")
if(b):
num+=1
b=False
else:
b=true
except Exception as e:
print("Exception: "+str(e))
if(b):
num+=1
b=False
else:
b=true
这是urls.txt:
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c01_code.zip
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c02_code.zip
........
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c25_code.zip
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c26_code.zip
以下是我创建 txt 文件的方式:
f = open("urls.txt","w")
k = """http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c"""
k1 = """_code.zip"""
import os
for i in range(26):
if(i<9):
f.write(k+str(0)+str(i+1)+k1+os.linesep)
else:
f.write(k+str(i+1)+k1+os.linesep)
f.close()
这是输出
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c01_code.zip
Exception2: unknown url type: ''
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c02_code.zip
Exception3: unknown url type: ''
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c03_code.zip
Exception3: HTTP Error 404: Not Found
........
Exception26: unknown url type: ''
http://media.wiley.com/product_ancillary/50/11188580/DOWNLOAD/c26_code.zip
Exception27: unknown url type: ''
我没有包括所有的输出行,因为它们是一样的。该代码可以正常运行,但我想知道我们是否可以删除异常。
您的文件中似乎有一些空行,因此当您尝试获取 ''
时 urllib
抛出 ValueError
异常,这显然不是 [=24] =].
如果您在循环中添加一个条件来检查空字符串,则可以修复此错误。
for i in zip_file_open.read().splitlines():
if not i.strip():
continue
...
但这不适用于非 url 的非空字符串,例如 'not a url'
.
更好的方法是用 urlparse
.
for i in zip_file_open.read().splitlines():
if not urllib.parse.urlparse(i).scheme:
continue
...