J'ai donc analysé une page html avec .findAll (BeautifulSoup) en variable nommée result. Si je tape result dans le shell Python puis appuie sur Entrée, je vois le texte normal comme prévu, mais comme je voulais post-traiter ce résultat en tant qu'objet chaîne, j'ai remarqué que str(result) renvoie des ordures, comme cet exemple:

\xd1\x87\xd0\xb8\xd0\xbb\xd0\xbd\xd0\xb8\xd1\x86\xd0\xb0</a><br />\n<hr />\n</div>

La source de la page HTML est codée utf-8

Comment puis-je gérer cela?


Le code est fondamentalement ceci, au cas où cela compte:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(urllib.open(url).read())
result = soup.findAll(something)

Python est 2,7

7
theta 16 oct. 2011 à 10:33

4 réponses

Meilleure réponse

Python 2.6.7 BeautifulSoup. version 3.2.0

Cela a fonctionné pour moi:

unicode.join(u'\n',map(unicode,result))

Je suis presque sûr qu'un result est un objet BeautifulSoup.ResultSet, ce qui semble être une extension de la liste standard de python

10
Johnny Brown 26 mars 2012 à 01:15

Ce n'est pas des ordures, c'est du texte encodé en UTF-8. Utilisez plutôt Unicode.

0
Ignacio Vazquez-Abrams 16 oct. 2011 à 06:43
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(urllib.open(url).read())
#findAll should get multiple parsed result
result = soup.findAll(something)
#then iterate result
for line in result:
    #get str value from each line,replace charset with utf-8 or other charset you need
    print line.__str__('charset')

BTW: la version de BeautifulSoup est beautifulsoup-3.2.1

3
ChangePicture 22 août 2013 à 15:30

Utilisez ceci:

unicodedata.normalize('NFKC', p.decode()).encode('ascii','ignore')

Unicode a plusieurs formulaires de normalisation Cette sortie ne doit pas être une ordure.
Utilisez l'attribut originalEncoding pour vérifier le schéma de codage.
Concernant les implémentations unicode de python, reportez-vous à ce document (même pour la normalisation)

0
Lelouch Lamperouge 16 oct. 2011 à 06:43
7782772