Question

Je suis en train de nettoyer tout le code HTML sur une chaîne de sorte que le résultat final est un fichier texte. J'ai quelques des recherches sur les différents « convertisseurs » et je commence à pencher vers la création de mon propre dictionnaire pour les entités et les symboles et l'exécution d'une chaîne sur la remplacer. Je considère cela parce que je veux automatiser le processus et il y a beaucoup de variabilité de la qualité du html sous-jacente. Pour commencer à comparer la vitesse de ma solution et l'une des alternatives, par exemple pyparsing j'ai décidé de tester remplacer de \ xa0 en utilisant la méthode de chaîne remplacer. Je reçois un

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

La ligne de code a été

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

En tout cas, j'ai décidé que je devais préfacer avec un r alors j'ai couru cette ligne de code:

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

Il fonctionne sans erreur mais je quand je regarde une tranche de s je vois que le \ XAO est toujours là

Était-ce utile?

La solution

peut être que vous devriez faire

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

Autres conseils

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

.. tente de créer le caractère unicode \xa0, ce qui est valable dans un sctring ASCII (le type de chaîne par défaut en Python jusqu'à ce que la version 3.x)

La r'\xa0' raison n'a pas d'erreur est parce que dans une chaîne brute, des séquences d'échappement n'a pas d'effet. Plutôt que d'essayer de coder \xa0 dans le caractère unicode, il a vu la chaîne comme un « anti-slash », « x littérale » et ainsi de suite ..

Les éléments suivants sont les mêmes:

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

Ceci est quelque chose résolu dans v3 Python, comme le type de chaîne par défaut est unicode, vous pouvez juste faire ..

>>> '\xa0'
'\xa0'
  

Je suis en train de nettoyer tout le code HTML sur une chaîne de sorte que le résultat final est un fichier texte

Je recommande fortement BeautifulSoup pour cela. Rédaction d'un outil de nettoyage HTML est difficile (étant donné la plus terrible HTML est), et BeautifulSoup fait un excellent travail à la fois HTML analyse syntaxique, et de traiter avec Unicode ..

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

Regardez le codecs bibliothèque standard, en particulier les encode et décodage méthodes fournies dans la classe de base codec.

Il y a aussi un bon article qui le met tous ensemble.

Au lieu de cela, il est préférable d'utiliser les fonctionnalités standard de Python.

Par exemple:

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

ou

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

replace remplacera \xa0 à \\xa0.

Mais si \xa0 est vraiment pas de sens pour vous et que vous voulez le retirer puis utilisez ignore.

Juste une note concernant le nettoyage HTML. Il est très très difficile, puisque

<
body
>

est un moyen valable d'écrire HTML. Juste un FYI.

Vous pouvez le convertir en unicode de cette façon:

print u'Hello, \xa0World'  # print Hello,  World
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top