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
4 réponses
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
Ce n'est pas des ordures, c'est du texte encodé en UTF-8. Utilisez plutôt Unicode.
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
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)
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.