2012-04-01 7 views
4

Wie kann ich den Quellcode einer Website in eine Textdatei in Python 3 kopieren?HTML-Quellcode in Datei speichern

EDIT: mein Problem zu klären, hier ist was ich habe:

import urllib.request 

def extractHTML(url): 
    f = open('temphtml.txt', 'w') 
    page = urllib.request.urlopen(url) 
    pagetext = page.read() 
    f.write(pagetext) 
    f.close() 

extractHTML('http:www.google.com') 

bekomme ich folgende Fehler für die f.write() Funktion:

builtins.TypeError: must be str, not bytes 
+0

Haben Sie versucht, hier zu suchen ?: http://stackoverflow.com/questions/5512811/builtins-typeerror-must-be-str-not-bytes – Jack

+0

Überraschenderweise hat keine der Antworten (außer einem) das Problem angesprochen .. 'pagetext' ist KEINE Zeichenfolge. Es ist tatsächlich Bytes. Um es in einen String zu konvertieren, müssen Sie 'f.write (pagetext.decode ('utf-8'))' verwenden, was eine UTF-8-codierte Zeichenfolge für die Datei bedeutet. – Brandon

+0

@Brandon Ich habe versucht, was Sie sagten, und bekam einen Fehler 'UnicodeDecodeError:' utf-8 'Codec kann Byte 0xa0 in Position 8482 nicht dekodieren: ungültiges Startbyte'. Ich habe meine Antwort einfach ohne die 'str()' kopiert und 'f.write (pagetext.decode ('utf-8'))' an die Stelle von 'f.write (pagetext)' gesetzt. Irgendeine Idee, warum das für mich nicht funktioniert. Wenn Sie Python 2 verwenden, könnte das der Grund sein, warum – Simon

Antwort

2
import urllib.request 
site = urllib.request.urlopen('http://somesite.com') 
data = site.read() 
file = open("file.txt","wb") #open file in binary mode 
file.writelines(data) 
file.close() 

Ungeprüfte aber sollte arbeiten.

EDIT: Aktualisiert für python3

+0

* nicht * funktioniert. Das OP verwendet Python 3. – DSM

+0

Hoppla, tut mir leid. Was ist das Problem in Python 3? – Jack

+0

urllib2 existiert nicht, für Anfänger. Ich denke normalerweise würden Sie das urllib.request Modul benutzen (dort wohnt urlopen jetzt.) – DSM

0

probably you wanted to create something like that:

import urllib.request 

class ExtractHtml(): 

    def Page(self): 

     print("enter the web page name starting with 'http://': ") 
     url=input() 
     site=urllib.request.urlopen(url) 
     data=site.read() 
     file =open("D://python_projects/output.txt", "wb") 
     file.write(data) 
     file.close() 






w=ExtractHtml() 
w.Page() 
0

bereits.

import urllib.request 
def extractHTML(url): 
    urllib.request.urlretrieve(url, 'temphtml.txt') 

Es ist einfacher, aber wenn Sie wollen immer noch, es so zu tun. Das ist die Lösung:

import urllib.request 

def extractHTML(url): 
    f = open('temphtml.txt', 'w') 
    page = urllib.request.urlopen(url) 
    pagetext = str(page.read()) 
    f.write(pagetext) 
    f.close() 

extractHTML('https://www.google.com') 

Ihr Skript gab einen Fehler, der besagt, dass es eine Zeichenfolge sein muss. Konvertieren Sie einfach Bytes in eine Zeichenfolge mit str().

Als nächstes bekam ich eine Fehlermeldung, dass kein Host angegeben wurde. Google is a secured site so https: not http: und am wichtigsten vergessen Sie, // am Ende von https: einzuschließen.