J'essaie de gratter un site Web, mais cela me donne une erreur.
J'utilise le code suivant:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
Et j'obtiens l'erreur suivante:
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>
Que puis-je faire pour résoudre ce problème?
python
beautifulsoup
urllib
SstrykerR
la source
la source
Je l'ai corrigé en ajoutant
.encode("utf-8")
àsoup
.Cela signifie que cela
print(soup)
devientprint(soup.encode("utf-8"))
.la source
bytes
objet, qui s'imprimera comme un désordre de\x
séquences s'il y a beaucoup de texte encodé en UTF-8. Je recommande d'utiliserwin_unicode_console
, comme le suggère @JFSebastian.b'\x02x\xc2\xa9'
(un objet en octets)print(soup.encode("utf-8"))
travaillé pour moi, mais avant cela, je devais également ajouterwith open("f_name", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser")
En Python 3.7 et fonctionnant sous Windows 10, cela a fonctionné (je ne sais pas si cela fonctionnera sur d'autres plates-formes et / ou d'autres versions de Python)
Remplacement de cette ligne:
with open('filename', 'w') as f:
Avec ça:
with open('filename', 'w', encoding='utf-8') as f:
La raison pour laquelle cela fonctionne est que le codage est modifié en UTF-8 lors de l'utilisation du fichier, de sorte que les caractères dans UTF-8 peuvent être convertis en texte, au lieu de renvoyer une erreur lorsqu'il rencontre un caractère UTF-8 qui est pas supporté par l'encodage actuel.
la source
Lors de l'enregistrement de la réponse de la demande get, la même erreur a été émise sur Python 3.7 sur la fenêtre 10. La réponse reçue de l'URL, le codage était UTF-8, il est donc toujours recommandé de vérifier le codage afin qu'il puisse être transmis pour éviter un problème aussi trivial car il tue vraiment beaucoup de temps en production
Lorsque j'ai ajouté encoding = "utf-8" avec la commande open, il a enregistré le fichier avec la bonne réponse
la source
Même moi, j'ai rencontré le même problème avec l'encodage qui se produit lorsque vous essayez de l'imprimer, de le lire / écrire ou de l'ouvrir. Comme d'autres l'ont mentionné ci-dessus, l'ajout de .encoding = "utf-8" vous aidera si vous essayez de l'imprimer.
Si vous essayez d'ouvrir des données grattées et peut-être de les écrire dans un fichier, ouvrez le fichier avec (......, encoding = "utf-8")
la source
Pour ceux qui obtiennent toujours cette erreur, l'ajout
encode("utf-8")
àsoup
corrigera également le problème.la source
soup
n'est plus unBeautifulSoup
objet après cela, il ne peut donc pas être manipulé ou recherché