Estoy tratando de raspar un sitio web, pero me da un error.
Estoy usando el siguiente código:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
Y obtengo el siguiente error:
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>
¿Qué puedo hacer para arreglar esto?
python
beautifulsoup
urllib
SstrykerR
fuente
fuente
Lo arreglé agregando
.encode("utf-8")
asoup
.Eso significa que se
print(soup)
convierteprint(soup.encode("utf-8"))
.fuente
bytes
objeto, que se imprimirá como un desorden de\x
secuencias si hay mucho texto codificado en UTF-8. Recomiendo usarwin_unicode_console
, como sugiere @JFSebastian.b'\x02x\xc2\xa9'
(un objeto de bytes) en su lugarprint(soup.encode("utf-8"))
funcionó para mí, pero antes de eso también tuve que agregarwith open("f_name", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser")
En Python 3.7, y ejecutar Windows 10 esto funcionó (no estoy seguro de si funcionará en otras plataformas y / u otras versiones de Python)
Reemplazando esta línea:
with open('filename', 'w') as f:
Con este:
with open('filename', 'w', encoding='utf-8') as f:
La razón por la que funciona es porque la codificación se cambia a UTF-8 cuando se usa el archivo, por lo que los caracteres en UTF-8 pueden convertirse en texto, en lugar de devolver un error cuando encuentra un carácter UTF-8 que es no suppord por la codificación actual.
fuente
Al guardar la respuesta de la solicitud get, se arrojó el mismo error en Python 3.7 en la ventana 10. La respuesta recibida de la URL, la codificación fue UTF-8, por lo que siempre se recomienda verificar la codificación para que se pueda pasar para evitar un problema tan trivial ya que realmente mata mucho tiempo en producción
Cuando agregué encoding = "utf-8" con el comando abierto, guardé el archivo con la respuesta correcta
fuente
Incluso me enfrenté al mismo problema con la codificación que ocurre cuando intentas imprimirlo, leerlo / escribirlo o abrirlo. Como otros mencionaron anteriormente, agregar .encoding = "utf-8" ayudará si está intentando imprimirlo.
Si está intentando abrir datos raspados y tal vez escribirlos en un archivo, abra el archivo con (......, encoding = "utf-8")
fuente
Para aquellos que todavía reciben este error, agregar
encode("utf-8")
asoup
también solucionará esto.fuente
soup
ya no es unBeautifulSoup
objeto después de hacer esto, por lo que no se puede manipular ni buscar