2017-07-07 8 views
1

を'のpython - urllib.request.urlretrieveは、予期しない例外不明なURLタイプスロー:私は、Python 3を使用していますが、ダウンロードが成功しているが、I ')(私はurllib.request.retrieveを使用してファイルをダウンロードしようとしています

をそれがなぜ例外をスローするのか分からない。

何らかの理由により、例外がスローされます。

これがメインのファイルである:これはurls.txtある

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 

:ここ

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: '' 

出力のすべての行を同じにしているわけではありません。コードは機能的ですが、例外を削除できるかどうかを知りたいと思います。

答えて

1

ファイルに空白行があるようですので、''を取得しようとすると、urllibValueError例外をスローします。これは明らかにURLではありません。
ループに条件を追加して空の文字列をチェックすると、このエラーを修正できます。

for i in zip_file_open.read().splitlines(): 
    if not i.strip(): 
     continue 
    ... 

しかし、これは一例'not a url'ため、URLのではない非空の文字列では動作しません。
より良い方法は、urlparseでURLスキームをチェックすることです。

for i in zip_file_open.read().splitlines(): 
    if not urllib.parse.urlparse(i).scheme: 
     continue 
    ... 
関連する問題