Google App Engine Python 2.7 + lxml = Unicode ParserError

Я пытаюсь использовать BeautifulSoup v4 для анализа документа. Я вызываю BeautifulSoup для note.content, который представляет собой строку, возвращаемую API Evernote:

суп = BeautifulSoup(note.content)

Я включил lxml в своем файле app.yaml:

libraries:
- name: lxml
  version: "2.3"

Обратите внимание, что это работает на моем локальном сервере разработки. Однако при развертывании в облаке Google я получаю следующую ошибку:

Трассировка ошибки:

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

ОБНОВЛЕНИЕ:

Я проверил parser.pxi и нашел эти строки кода, которые вызвали ошибку:

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

Я думаю, что в среде развертывания GAE должно быть что-то, что вызывает эту ошибку, но я не уверен, что именно.

ОБНОВЛЕНИЕ 2:

Поскольку BeautifulSoup автоматически использует другие парсеры, я полностью удалил lxml из своего приложения. Это устранило проблему.


person zzz    schedule 20.02.2012    source источник
comment
У вас есть эта ошибка при использовании SDK или в производстве? (или оба).   -  person proppy    schedule 20.02.2012
comment
Только в производстве; Он отлично работает в SDK с локальным хостом.   -  person zzz    schedule 20.02.2012
comment
У меня та же проблема, и я приземлился, удалив lxml. Тем не менее, снисходительность Python html.parser довольно плохая, и большинство моих страниц не анализируются из-за этого.   -  person Akshay Raje    schedule 26.03.2012


Ответы (2)


Попробуйте разобрать строку utf-8 вместо unicode.

person dogada    schedule 24.04.2012

По состоянию на май 2012 года эта ошибка все еще присутствует в рабочей версии, но не в SDK (1.6.6).

Однако откат к bs3 пока обходит его в рабочей среде:

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

person notreadbyhumans    schedule 25.05.2012