Discussion:
python, beautifulsoup y utf
(demasiado antiguo para responder)
p***@gmail.com
2009-05-10 12:09:42 UTC
Permalink
Hola

tengo un script en python y beautifulsoup con el que accedo a una
página web e imprimo en pantalla
unos cuantos datos, todo muy sencillo.

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen("http://www.onlae.es/primitiva/comprobar.aspx")
soup = BeautifulSoup(page)
page.close()

(...)

# Fecha del sorteo
sorteo = soup.find("h2", {"class" : "sorteo"})
print sorteo.string

(...)

Desde la consola, al ejecutar el script todo funciona sin problemas:

~$ tmp/loto.py

Sorteo

19/S, sábado, 09 de mayo de 2009
(...)

Pero si el script se ejecuta desde crontab, me da un error de
codificación:

Traceback (most recent call last):
File "/home/user/tmp/loto.py", line 25, in <module>
print sorteo.string
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in
position 31: ordinal not in range(128)

¿Alguna idea de como solucionar esto?
Mario Teijeiro Otero
2009-05-10 12:23:11 UTC
Permalink
***@gmail.com wrote:

Me da que no están bien definidas las variables LC_XX en la tarea del cron.
Intenta definirlas al crear la tarea del crontab.

Un saludo
Post by p***@gmail.com
Hola
tengo un script en python y beautifulsoup con el que accedo a una
página web e imprimo en pantalla
unos cuantos datos, todo muy sencillo.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://www.onlae.es/primitiva/comprobar.aspx")
soup = BeautifulSoup(page)
page.close()
(...)
# Fecha del sorteo
sorteo = soup.find("h2", {"class" : "sorteo"})
print sorteo.string
(...)
~$ tmp/loto.py
Sorteo
19/S, sábado, 09 de mayo de 2009
(...)
Pero si el script se ejecuta desde crontab, me da un error de
File "/home/user/tmp/loto.py", line 25, in <module>
print sorteo.string
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in
position 31: ordinal not in range(128)
¿Alguna idea de como solucionar esto?
p***@gmail.com
2009-05-10 13:40:37 UTC
Permalink
On 10 mayo, 14:23, Mario Teijeiro Otero <***@escomposlinux.org>
wrote:
~$ crontab -l
LANG=es_ES.UTF-8
LC_MESSAGES=es_ES.UTF-8
LC_TYPE=es_ES.UTF-8
# m h dom mon dow command
37 15 * * 0 /home/user/tmp/loto.py

mismo error.
Samuel L. Jackson
2009-06-04 22:39:39 UTC
Permalink
Post by p***@gmail.com
~$ crontab -l
LANG=es_ES.UTF-8
(...)
mismo error.
import sys
sys.getdefaultencoding()
'ascii'

Solución: editar /usr/lib/python/sitecustomize.py y añadir las líneas

import sys
sys.setdefaultencondig("utf-8")

La explicación en google, buscando "the illusive setdefaultencoding"
(no tengo la url ahora mismo, ni conexion mientras escribo esto)
--
Lorem ipsum dolor sit amet
Loading...