2 Stimmen

Herunterladen von HTML ohne Python-Unicode-Fehler

Ich versuche, page_source in eine Datei herunterzuladen. Allerdings bekomme ich jedes Mal eine:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 (or something else) in 
position 8304: ordinal not in range(128)

Ich habe versucht, mit value.encode('utf-8') aber es scheint, dass es jedes Mal die gleiche Ausnahme auslöst (zusätzlich zu dem manuellen Versuch, jedes Nicht-Ascii-Zeichen zu ersetzen). Gibt es eine Möglichkeit, die Html-Datei vorzuverarbeiten, um sie in ein schreibbares Format zu bringen?

3voto

ekhumoro Punkte 106167

Es gibt Bibliotheken von Drittanbietern wie z. B. BeautifulSoup y lxml die automatisch mit Kodierungsproblemen umgehen kann. Aber hier ist ein grobes Beispiel, das nur urlllib2 :

Laden Sie zunächst eine Webseite herunter, die Nicht-ASCI-Zeichen enthält:

>>> import urllib2
>>> response = urllib2.urlopen('http://www.ltg.ed.ac.uk/~richard/unicode-sample.html')
>>> data = response.read()

Achten Sie nun auf den "Zeichensatz" oben auf der Seite:

>>> data[:200]
'<html>\n<head>\n<title>Unicode 2.0 test page</title>\n<meta
content="text/html; charset=UTF-8" http-equiv="Content-type"/>\n
</head>\n<body>\n<p>This page contains characters from each of the
Unicode\ncharact'

Wenn es keinen offensichtlichen Zeichensatz gibt, ist "UTF-8" in der Regel ohnehin ein guter Tipp.

Schließlich konvertieren Sie die Webseite in Unicode-Text:

>>> text = data.decode('utf-8')

1voto

Ich bin mir jedoch nicht sicher http://www.crummy.com/software/BeautifulSoup/ hat eine Funktion .prettify(), die gut formatiertes HTML zurückgibt. Sie könnten versuchen, dies für die "Vorverarbeitung" zu verwenden.

1voto

Jesse Aldridge Punkte 7601

Das Problem ist wahrscheinlich, dass Sie versuchen, die str -> utf-8 , wenn Sie gehen müssen str -> unicode -> utf-8 . Mit anderen Worten: Versuchen Sie unicode(s, 'utf-8').encode('utf-8') .

Siehe http://farmdev.com/talks/unicode/ für weitere Informationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X