2016-03-20 15 views
0

複数のWebサイトからソースコード(HTML)を読み込み、次のコードを使用しようとしています。サイトがutf-8でエンコードされている限り、うまく動作しますが、ISO-8859-1でエンコードされたサイトはいくつかの問題を引き起こします。下のコードで分かるように、2番目のブロック以外のブロックに行くはずです。プログラムを実行すると、ブロック内のデバッグプリントが出力されます。ただし、変数html_docは値を取得しません。 f.read().deode ...文はtry-exceptブロックの外側にある同じステートメントでコメントアウトされた行として完全に機能します。なぜこれが起こるのですか?私はこれまでに私自身でそれを理解することができなかったので、問題の解決方法に関する提案を本当に感謝しています。Urllibは内部では読み込みません

def getSource(self, target_url): 
    print(target_url) 
    html_doc = None 
    try: 
     f = urllib.request.urlopen(target_url) 
    except: 
     return None 
    #html_doc = f.read().decode("ISO-8859-1") 
    try: 
     html_doc = f.read().decode("utf-8")  # Save source code of URL to html_doc 
     print(html_doc) 
    except: 
     print("I Went here") 
     html_doc = f.read().decode("ISO-8859-1") # Use other encoding if failed 
     print("I SAID SO") 
    print(html_doc) 
    return html_doc 

答えて

0

ファイルを変数に読み込んだ後、ファイルを閉じた後に解読することをお勧めします。ここで起こっていることは、ファイルを開いてデータを読み、それが失敗した後にさらにデータを読み込むことですが、データがなくなり、html_docが空になってしまいます。

ので、このような何か:

html_doc = f.read() 
try: 
    html_doc = html_doc.decode("utf-8") 
except: 
    html_doc = html_doc.decode("ISO-8859-1") 
+0

私はちょうど(f.read呼び出すと仮定)、再び、再びサイト全体を読んでいましたが、apperently私は間違っていました。これで問題は解決したので、どうもありがとう! – user3473493

関連する問題