2012-02-20 21 views
6

Estoy tratando de usar BeautifulSoup v4 para analizar un documento. Me llamo BeautifulSoup en note.content, que es una cadena devuelta por la API de Evernote:Google App Engine Python 2.7 + lxml = Unicode ParserError

soup = BeautifulSoup(note.content)

He permitido lxml en mi archivo app.yaml:

libraries: 
- name: lxml 
    version: "2.3" 

Tenga en cuenta que esto funciona en mi desarrollo local servidor. Sin embargo, cuando se despliegan en la nube de Google me sale el siguiente error:

Rastrear error:

Unicode parsing is not supported on this platform 
Traceback (most recent call last): 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in __call__ 
    return handler.dispatch() 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 547, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~ever-blog/1.356951374446096208/controller/blog.py", line 101, in get 
    soup = BeautifulSoup(note.content) 
    File "/base/data/home/apps/s~ever-blog/1.356951374446096208/lib/bs4/__init__.py", line 168, in __init__ 
    self._feed() 
    File "/base/data/home/apps/s~ever-blog/1.356951374446096208/lib/bs4/__init__.py", line 181, in _feed 
    self.builder.feed(self.markup) 
    File "/base/data/home/apps/s~ever-blog/1.356951374446096208/lib/bs4/builder/_lxml.py", line 62, in feed 
    self.parser.feed(markup) 
    File "parser.pxi", line 1077, in lxml.etree._FeedParser.feed (third_party/apphosting/python/lxml/src/lxml/lxml.etree.c:76196) 
ParserError: Unicode parsing is not supported on this platform 

ACTUALIZACIÓN:

Revisé parser.pxi, y me encontré con estas líneas de código que generó el error:

elif python.PyUnicode_Check(data): 
      if _UNICODE_ENCODING is NULL: 
       raise ParserError, \ 
        u"Unicode parsing is not supported on this platform" 

Creo que debe haber algo sobre el entorno de implementación de GAE que causa este error , pero no estoy seguro de qué.

ACTUALIZACIÓN 2:

Debido BeautifulSoup caerá automáticamente en otros programas de análisis, que terminó eliminando lxml de mi solicitud en su totalidad. Al hacerlo, se solucionó el problema.

+0

¿Tiene este error utilizando el SDK o en la producción? (o ambos). – proppy

+0

Solo en producción; Funciona bien en el SDK con localhost. – zzz

+0

Estoy teniendo el mismo problema y aterrizamos eliminando lxml. Sin embargo, la clemencia de html.parser de Python es bastante mala y la mayoría de mis páginas no se analizan debido a esto. –

Respuesta

1

Intenta analizar cadena utf-8 en lugar de unicode.