Seite 1 von 1

Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 16:33
von b4shyou
Hey Leute,

ich soll aus einer formularübergebenen URL den Quelltext (nur HTML) als html Datei abspeichern.

als erstes hab ich mir überlegt, die Seite erstmal aufzurufen

Code: Alles auswählen

#!/usr/bin/python3
import cgi
import urllib.request
 
form = cgi.FieldStorage()
 
f1 = form["url"].value
f2 = form["name"].value
 
website = f1
 
print(website)
 
t = urllib.request.urlopen(website)
 
print(t.read())





Nun weiß ich allerdings nicht, wie ich diesen Aufruf nun als HTML Datei speichern kann.

Wäre cool wenn jemand einen Tipp hätte =)

LG
Marci

Re: Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 16:37
von mutetella
b4shyou hat geschrieben:Nun weiß ich allerdings nicht, wie ich diesen Aufruf nun als HTML Datei speichern kann.
Letztlich ist 'ne html Datei ja auch "nur" eine Textdatei, in die Du die ``read()`` Rückgabe schreibst.

mutetella

Re: Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 16:46
von b4shyou
also ich hab es jetzt mal so versucht

Code: Alles auswählen

#!/usr/bin/python3
import cgi
import urllib.request


form = cgi.FieldStorage()

f1 = form["url"].value
f2 = form["name"].value


website = f1
name = f2


print(website)
t = urllib.request.urlopen(website)

print(t.read())


ndatei = open("/Pfad zur Datei"+name+".html", "w")
ndatei.write(t)
ndatei.close()
    
LG
Marci

Re: Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 17:49
von mutetella
@b4shyou
Und es hat nicht funktioniert, oder? :wink:

mutetella

Re: Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 19:44
von b4shyou
Nein es hat nicht geklappt :oops:

aber er hat immerhin eine leere HTML Datei mit dem übergebenem Namen erstellt 8)

Re: Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 21:01
von BlackJack
@b4shyou: Und es gab eine Ausnahme die im Fehlerprotokoll vom Webserver stehen sollte.

Re: Website als HTML Datei ablegen

Verfasst: Montag 8. Juni 2015, 21:32
von jens
Der letzte code macht aber auch kleinen Sinn... Vergl. Print und write ;)

Re: Website als HTML Datei ablegen

Verfasst: Dienstag 9. Juni 2015, 09:36
von mutetella
@b4shyou
Um es für Dich etwas abzukürzen:
  1. ``t.read()`` liefert Dir seit Python 3 bytes. Wenn Du diese bytes in eine Datei schreiben möchtest, musst Du diese Datei im binary mode öffen, siehe dazu die Dokumentation.
  2. Das Schließen der Datei kannst Du Dir sparen, wenn Du Dir angewöhnst, Dateien über das with statement zu öffnen. Damit stellst Du auch sicher, dass die Datei auch in Ausnahmefällen geschlossen wird:

    Code: Alles auswählen

    with open('any.html', 'wb') as html_file:
        html_file.write(response.read())
  3. Du solltest aussagekräftigere Namen verwenden. `t`, `name`, `ndatei` etc. sind Namen, die anderen, die Deinen Code lesen und verstehen wollen nichts sagen. Und Dir später einmal auch nichts... ;-)
  4. Um einen gültigen Dateinamen samt Pfadangabe zu erstellen, empfiehlt sich os.path.join:

    Code: Alles auswählen

    >>> os.path.join('/Pfad zur Datei', 'datei.html')
    '/Pfad zur Datei/datei.html'
mutetella

Re: Website als HTML Datei ablegen

Verfasst: Dienstag 9. Juni 2015, 17:36
von b4shyou
Vielen Dank an alle Antworter =)


Ich werd es morgen weiterversuchen und euch auf dem laufenden halten.

Auf das Fehlerprotokoll habe ich leider keinen Zugriff

LG
Marci

Re: Website als HTML Datei ablegen

Verfasst: Dienstag 9. Juni 2015, 21:47
von jens
b4shyou hat geschrieben:Auf das Fehlerprotokoll habe ich leider keinen Zugriff
https://docs.python.org/3.4/library/cgitb.html :lol: