2017-08-05 2 views
0

J'écris un simple programme python qui récupère des informations à partir d'un site Web, le problème est qu'il y a des mots qui contiennent des caractères spéciaux tels que "°", "Ψ" et beaucoup plus .Python 2.7.13 UnicodeEncodeError et caractères spéciaux

Voici mon code:

# -*- coding: utf-8 -*- 
from bs4 import BeautifulSoup 
import urllib 
r = urllib.urlopen('http://www.samplepage.sample').read() 
soup = BeautifulSoup(r, "lxml") 
text = soup.find_all("a", class_="some_class") 
for word in text: 
    word = word.get_text() 
    word = word.encode('utf-8') 
    print word 

la sortie doit être « ° », mais au lieu de cela, je reçois « Â ° »

Si je tente de l'encoder avec ascii je reçois la classique UnicodeEncodeError:

for word in text: 
    word = word.get_text() 
    word = word.encode('ascii') 
    print word 

>>> UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-8: 
ordinal not in range(128) 

Des idées?

+1

Quel est le _samplepage.sample_ ici? – ksai

+0

C'est juste n'importe quelle page Web – devmon

+0

Nous ne pouvons pas voir la sortie de votre script jusqu'à ce que vous fournissiez le _url_ – ksai

Répondre

0

Cela se produit probablement parce que vous décodez la chaîne en utilisant le mauvais codec.

Essayez d'imprimer la chaîne, et avant de l'encoder avec utf-8 premier vous devez décoder la chaîne en utilisant le codec. Ensuite, vous obtiendrez un objet Unicode, que vous pouvez imprimer et devrait être affiché correctement.

S'il s'agit d'un char spécial en dehors du mappage ascii, vous aurez besoin de l'objet Unicode pour l'afficher correctement.

Essayez d'effectuer les opérations suivantes:

new_word = word.decode('latin-1') 
print new_code 
word = word.encode('utf-8') 
+0

Pouvez-vous s'il vous plaît fournir un extrait de code? – devmon

+0

@devmon J'ai ajouté un extrait de réponse à votre question – Vinny