Tengo un problema con el módulo html2text … me muestra UnicodeDecodeError:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbe in position 6: ordinal not in range(128)
Ejemplo:
#!/usr/bin/python # -*- coding: utf-8 -*- import html2text import urllib h = html2text.HTML2Text() h.ignore_links = True html = urllib.urlopen( "http://google.com" ).read() print h.handle( html )
… también probé h.handle( unicode( html, "utf-8" )
sin éxito. Cualquier ayuda. EDITAR:
Traceback (most recent call last): File "test.py", line 12, in print h.handle(html) File "/home/alex/Desktop/html2text-master/html2text.py", line 254, in handle return self.optwrap(self.close()) File "/home/alex/Desktop/html2text-master/html2text.py", line 266, in close self.outtext = self.outtext.join(self.outtextlist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xbe in position 6: ordinal not in range(128)
El problema es fácilmente reproducible cuando no se decodifica , pero funciona bien cuando decodificas tu fuente correctamente. ¡ También obtendrá el error si reutiliza el analizador!
Puede probar esto con una buena fuente conocida de Unicode, como http://www.ltg.ed.ac.uk/~richard/unicode-sample.html
.
Si no descodifica la respuesta a unicode
, la biblioteca falla:
>>> h = html2text.HTML2Text() >>> h.handle(html) Traceback (most recent call last): File "", line 1, in File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 240, in handle return self.optwrap(self.close()) File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 252, in close self.outtext = self.outtext.join(self.outtextlist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
Ahora, si reutiliza el objeto HTML2Text
, su estado no se borra, aún conserva los datos incorrectos, por lo que incluso pasar unicode ahora fallará:
>>> h.handle(html.decode('utf8')) Traceback (most recent call last): File "", line 1, in File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 240, in handle return self.optwrap(self.close()) File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/html2text.py", line 252, in close self.outtext = self.outtext.join(self.outtextlist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
Necesitas usar un nuevo objeto y funcionará bien:
>>> h = html2text.HTML2Text() >>> result = h.handle(html.decode('utf8')) >>> len(result) 12750 >>> type(result)