Foros del Web » Programando para Internet » Python »

Codificacion de texto

Estas en el tema de Codificacion de texto en el foro de Python en Foros del Web. Estoy usando BeautifulSoup leer contenidos de paginas webs y tengo un problema. La pagina web que leo esta en utf-8. Con BeatuifulSoup no hay problemas ...
  #1 (permalink)  
Antiguo 02/12/2013, 07:46
 
Fecha de Ingreso: abril-2011
Ubicación: Motril
Mensajes: 49
Antigüedad: 12 años, 11 meses
Puntos: 1
Sonrisa Codificacion de texto

Estoy usando BeautifulSoup leer contenidos de paginas webs y tengo un problema.

La pagina web que leo esta en utf-8. Con BeatuifulSoup no hay problemas en esto, y cuando ejecuto msg = soup.a['title'] mete en la variable msg un string en utf-8 sin problemas.

El caso es que a la hora de guardar este valor en un fichero (o ponerlo por consola) me da errores:
- Si hago print(str(mgs)) todo va bien, acentos incluidos, pero llegan caracteres extraños y falla 'charmap' codec can't encode character '\x92' in position 3
- Si hago print(str.encode(msg,encoding="utf-8")) no da errores en la ejecución, pero me escribe tensi\xc3\xb3n en lugar de tensión, ademas de poner siempre la cadena como b'tensión', y no quiero que muestre este b'...'.

¿Hay una forma de imprimir esto bien? Los caracteres que fallan me da igual ignorarlos, pero no quiero quitar todas las letras con acento (al menos deberia dejar las letras sin el acento puesto, aunque no es lo ideal).

El fallo es con la consola de windows, pero no me sirve que funcione solo en linux.
  #2 (permalink)  
Antiguo 02/12/2013, 11:34
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Codificacion de texto

Probaste con
Código Python:
Ver original
  1. print(msg)

Con algo de código que replique tu error, podríamos ayudarte mas.
  #3 (permalink)  
Antiguo 02/12/2013, 13:43
 
Fecha de Ingreso: abril-2011
Ubicación: Motril
Mensajes: 49
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Codificacion de texto

Os pongo el codigo y me decis:

Código Python:
Ver original
  1. d = request.urlopen(dominio)
  2.         web = d.read()
  3.         soup = BeautifulSoup(web)
  4.         diccionario = soup.find("ul", {"id":"list-container"})
  5.         for l in diccionario.find_all('li'):
  6.             txt = l.a['title']
  7.             print(str.encode(txt,encoding="ascii",errors='replace'))
  8. #           print((str(txt,errors='ignore')))
  9. #           print(str(txt))
  10. #           print(txt)

con print(txt) ya he conseguido que me funcione, aunque antes me daba problemas por conversion de bytes a str (no recuerdo el errror exacto).
De todas formas, ¿hay alguna forma de que cuando imprimes algo con encode="..." no te muestre de la forma u'...' o b'...'?

Edito: con print(txt) me da 'charmap' codec can't encode character '\x92' in position 3.

Última edición por anrodse; 02/12/2013 a las 13:57
  #4 (permalink)  
Antiguo 02/12/2013, 16:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Codificacion de texto

Bueno probé con 2 sitios el siguiente script. Ya que el tuyo no era ejecutable con copiar y pegar hice este.

Código Python:
Ver original
  1. from urllib import request
  2. from bs4 import BeautifulSoup
  3.  
  4. #dominio = 'http://www.fayerwayer.com/'
  5. dominio = 'http://www.jpf.go.jp/'
  6. d = request.urlopen(dominio)
  7. web = d.read()
  8. soup = BeautifulSoup(web)
  9. titulo = soup.find("title")
  10. print(titulo.text)

Y en los 2 sitos funciona muy bien.

Aun no puedo replicar tu error :(
  #5 (permalink)  
Antiguo 16/12/2013, 11:56
 
Fecha de Ingreso: abril-2011
Ubicación: Motril
Mensajes: 49
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Codificacion de texto

El caracter que me falla es este: '’'
Esta entre las dos comillas, pero no se ve. Si intentas leer este cuadro de texto, al imprimirlo te dará un error python.

Si intentas imprimir la cadena: L’aveugle se ve que hay un fallo, por un caracter que esta despues de la L. Se supone que era una comilla, pero no se ve.

Edito: se ve que esta web cambia esta comilla por otra, y por tanto aqui si funciona. Buscaré otro ejemplo mejor.

Última edición por anrodse; 16/12/2013 a las 11:57 Razón: Fallo en el caracter

Etiquetas: consola, decode, encode, utf-8, windows
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:24.