2017-02-12 4 views
0

Ich habe für ein Programm in den letzten Tagen gearbeitet, die eine Reihe von Seiten aus dem Webcomic Homestuck herunterladen sollte. Ich habe eine funktionierende Version in Python 3 erstellt, aber es ist schrecklich ineffizient. Kann jemand sehen, wie man diesen Code verbessern und verkürzen kann?Erstellen eines Programms zum Herunterladen Homestuck (Python3)

import urllib.request 
range1 = int(input("Enter the 1st page you want: ")) 
range2 = int(input("Enter the last page you want: ")) + 1 
current = range1 + 1900 
final = range2 + 1900 
page = '' 
nextPage = '' 
while current != final: 
    page = str(current) 
    nextPage = str(current+1) 
    while len(page) != 6: 
     page = '0'+ page 
    while len(nextPage) != 6: 
     nextPage = '0'+ nextPage 
    html = 'http://www.mspaintadventures.com/?s=6&p='+page 
    site = urllib.request.urlopen(html) 
    s = site.read() 
    s = s.decode("utf8") 
    s = s.replace("<!-- end comic content -->", "<!-- begin comic content -->") 
    s = s.replace("http://cdn.mspaintadventures.com/storyfiles/hs2/", "") 
    s = s.replace("?s=6&p=" + str(nextPage), str(int(nextPage))+".html") 
    s = s.replace(page+"/"+page, page) 
    a,b,c = s.split('<!-- begin comic content -->') 
    b = "<title> Page " + page + "</title>" + b 
    t = open(str(current)+".html", 'w+') 
    t.write(b) 
    t.close() 
    page = str((int(page)-1900)) 
    while len(page) != 5: 
     page = '0'+ page 

    t = open(str(current)+".html", 'a') 
    swfname=page+".swf" 
    t.write("<object width='1000' height='1000'> <param name='movie' value='"+swfname+"'>") 
    t.write("<embed src="+swfname+" width=650 height=450>") 
    t.write("</embed>") 
    t.write("</object>") 
    t.close() 
    try: 
     img = "http://cdn.mspaintadventures.com/storyfiles/hs2/"+page+".gif" 
     urllib.request.urlretrieve(img, page+".gif") 
    except: 
     try: 
      img = "http://cdn.mspaintadventures.com/storyfiles/hs2/"+page+"_1.gif" 
      urllib.request.urlretrieve(img, page+"_1.gif") 
      img = "http://cdn.mspaintadventures.com/storyfiles/hs2/"+page+"_2.gif" 
      urllib.request.urlretrieve(img, page+"_2.gif") 
     except: 
      try: 
       img = "http://cdn.mspaintadventures.com/storyfiles/hs2/"+page+"/"+page+".swf" 
       urllib.request.urlretrieve(img, page+".swf") 
      except: 
       print("Image "+img+" failed to download") 
    print ("Page " + str(page) + " of " + str(final-1901) + " downloaded") 
    current+=1 
    print("DONE") 
+2

Vielleicht besser geeignet für http://codereview.stackexchange.com/? Auch - ist Ihre Einrückung korrekt? An diesem Punkt wird Ihr Code nicht über die erste While-Schleife hinausgehen. – SiHa

+0

Der Code funktioniert, deshalb habe ich ihn wahrscheinlich falsch im Stackoverflow formatiert. Auch ich wusste nicht über Codereview, danke –

Antwort

0

1) Ich verstehe nicht, diese Zeilen:

t = open(str(current)+".html", 'w+') 
t.write 

2) Sie sollten mehrere Schreiben in eine Datei vermeiden. Es ist besser, String-Formatierung zu verwenden und dann einmal zu schreiben.

text='''<object width='1000' height='1000'> <param name='movie' value='{0}'> 
<embed src="{0}" width=650 height=450> 
</embed> 
</object>'''.format(swfname) 
t.write(text) 
t.close() 
+0

Ich habe das erste Problem behoben, aber können Sie erklären, was Sie in der zweiten tun? –

+0

Sie erstellen einen String mit Endline-Zeichen (also müssen Sie ''' '' verwenden) und ersetzen Sie die {0}, {1}, ... mit dem ersten, zweiten, ... Argumente von 'format'. Weitere Informationen finden Sie unter [String-Formatierung] (https://docs.python.org/3.6/library/string.html#formatstrings) – VdF

Verwandte Themen