Website als HTML Datei ablegen

Django, Flask, Bottle, WSGI, CGI…
Antworten
b4shyou
User
Beiträge: 9
Registriert: Montag 1. Juni 2015, 14:30

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
b4shyou
User
Beiträge: 9
Registriert: Montag 1. Juni 2015, 14:30

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@b4shyou
Und es hat nicht funktioniert, oder? :wink:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
b4shyou
User
Beiträge: 9
Registriert: Montag 1. Juni 2015, 14:30

Nein es hat nicht geklappt :oops:

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

@b4shyou: Und es gab eine Ausnahme die im Fehlerprotokoll vom Webserver stehen sollte.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Der letzte code macht aber auch kleinen Sinn... Vergl. Print und write ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
b4shyou
User
Beiträge: 9
Registriert: Montag 1. Juni 2015, 14:30

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

b4shyou hat geschrieben:Auf das Fehlerprotokoll habe ich leider keinen Zugriff
https://docs.python.org/3.4/library/cgitb.html :lol:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten