Tengo problemas para tratar con caracteres Unicode del texto obtenido de diferentes páginas web (en diferentes sitios). Estoy usando BeautifulSoup.
El problema es que el error no siempre es reproducible; a veces funciona con algunas páginas y, a veces, irrita lanzando a UnicodeEncodeError
. He intentado casi todo lo que se me ocurre y, sin embargo, no he encontrado nada que funcione de manera consistente sin arrojar algún tipo de error relacionado con Unicode.
A continuación se muestra una de las secciones de código que está causando problemas:
agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
Aquí hay un seguimiento de pila producido en ALGUNAS cadenas cuando se ejecuta el fragmento anterior:
Traceback (most recent call last):
File "foobar.py", line 792, in <module>
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
Sospecho que esto se debe a que algunas páginas (o más específicamente, páginas de algunos de los sitios) pueden estar codificadas, mientras que otras pueden estar sin codificar. Todos los sitios están ubicados en el Reino Unido y proporcionan datos destinados al consumo del Reino Unido, por lo que no hay problemas relacionados con la internalización o el tratamiento de textos escritos en otro idioma que no sea inglés.
¿Alguien tiene alguna idea sobre cómo resolver esto para que pueda solucionar este problema de manera CONSISTENTE?
import os; import locale; os.environ["PYTHONIOENCODING"] = "utf-8"; myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8"); ... print(myText.encode('utf-8', errors='ignore'))
.
$ export PYTHONIOENCODING=utf8