2016-03-20 24 views
0

Birden çok web sitesindeki kaynak kodunu (html) okumaya çalışıyorum ve aşağıdaki kodu kullanın. Site utf-8'de kodlandığı sürece gayet iyi çalışır ancak ISO-8859-1'de kodlanmış bir site bazı problemlere neden olur. Aşağıdaki kodda da görebileceğiniz gibi, blok dışında ikinci sayfaya gitmesi beklenir ve program çalıştırıldığında blok içindeki hata ayıklama baskısı yazdırılır. Ancak, html_doc değişkeni herhangi bir değer almıyor. f.read() ile yanlış bir şey gibi görünmüyor ... decode ... ifadesi, try-except bloğu dışında aynı ifadeyle birlikte yorumlanmış hat mükemmel bir şekilde çalışıyor. Bu neden oluyor? Şu ana kadar problemin nasıl çözüleceğine dair önerileri gerçekten takdir ediyorum.Urllib içeride okuma dışında çalışmaz

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 

cevap

0

Dosyayı önce bir değişkene okumayı ve sonra dosyayı kapattıktan sonra çözmeyi öneririm. Burada neler olduğuna inanıyorum, dosyayı açmanız, verileri okumanız, başarısız olmanız, daha fazla veri okuyorsunuz, fakat okumak için daha fazla veri kalmıyor, böylece html_doc boş kalıyor.

yüzden böyle bir şey:

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

sadece tekrar() f.read çağırarak tekrar bütün siteyi okumak farz, ama apperently yanılmışım. Bu sorun sadece iyi çözüldü, çok teşekkür ederim! – user3473493