Frage

Ich versuche, alle HTML aus einer Zeichenfolge zu reinigen, so dass die endgültige Ausgabe ist eine Textdatei. Ich habe einige einige der Forschung über die verschiedenen ‚Wandler‘ und fange an zu lehnen mein eigenes Wörterbuch für die Entitäten und Symbole auf die Schaffung und den Betrieb eines auf der Saite ersetzen. Ich betrachte das, weil ich den Prozess automatisieren will, und es gibt eine Menge Variabilität in der Qualität des zugrunde liegenden HTML. Vergleichen der Geschwindigkeit meiner Lösung und eine der Alternativen zum Beispiel zu beginnen pyparsing Ich ersetze von \ xa0 zu testen, entschied sich die String-Methode ersetzen verwenden. Ich erhalte ein

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

Die eigentliche Codezeile war

s=unicodestring.replace('\xa0','')

Wie auch immer, ich entschied, dass ich brauchte es mit einem r Vorwort so lief ich diese Codezeile:

s=unicodestring.replace(r'\xa0','')

Es läuft ohne Fehler, aber ich, wenn ich an einem Stück s sehe ich sehe, dass die \ xao ist immer noch da

War es hilfreich?

Lösung

sein kann, sollten Sie tun

s=unicodestring.replace(u'\xa0',u'')

Andere Tipps

s=unicodestring.replace('\xa0','')

.. versucht, die Unicode-Zeichen \xa0 zu schaffen, die nicht gültig in einem ASCII-sctring ist (der Standard-String-Typ in Python bis Version 3.x)

Der r'\xa0' Grund nicht Fehler ist, weil in einem rohen String, Escape-Sequenzen keine Wirkung. Anstatt zu versuchen, \xa0 in die Unicode-Zeichen zu kodieren, sah es die Zeichenfolge als „Backslash“, „wörtliche x“ und so weiter ..

Im folgenden sind die gleichen:

>>> r'\xa0'
'\\xa0'
>>> '\\xa0'
'\\xa0'

Das ist etwas in Python v3 aufgelöst, als der Standard-String-Typ Unicode ist, so dass Sie .. nur tun können,

>>> '\xa0'
'\xa0'
  

Ich versuche, alle HTML aus einer Zeichenfolge zu reinigen, so dass die endgültige Ausgabe eine Textdatei

ist

Ich würde empfehlen, BeautifulSoup für diese. Das Schreiben eines HTML-Reinigungswerkzeug ist schwierig (gegeben, wie schrecklich die meisten HTML ist), und BeautifulSoup hat eine große Aufgabe an beiden Parsen HTML, und den Umgang mit Unicode ..

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<html><body><h1>Hi</h1></body></html>")
>>> print soup.prettify()
<html>
 <body>
  <h1>
   Hi
  </h1>
 </body>
</html>

Sehen Sie sich die Codecs Standard-Bibliothek, insbesondere die kodieren und dekodieren Methoden in der Codec-Basisklasse zur Verfügung gestellt.

Es gibt auch einen guten Artikel hier dass es ausdrückt alle zusammen.

Statt dessen ist es besser, Standard-Python-Funktionen zu verwenden.

Zum Beispiel:

string = unicode('Hello, \xa0World', 'utf-8', 'replace')

oder

string = unicode('Hello, \xa0World', 'utf-8', 'ignore')

Dabei gilt replace \xa0 ersetzen wird \\xa0.

Aber wenn \xa0 ist wirklich nicht sinnvoll für Sie, und Sie wollen es entfernen, dann ignore verwenden.

Nur ein Hinweis in Bezug auf HTML Reinigung. Es ist sehr, sehr hart, da

<
body
>

Ist ein gültiger Weg HTML zu schreiben. eine nur zu ihrer Information.

Sie können es konvertieren auf diese Weise Unicode:

print u'Hello, \xa0World'  # print Hello,  World
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top