lxml загружает только одну сетевую сущность перед поднятием XMLSyntaxError

1

Я пишу код для работы с API-интерфейсами на основе запросов Amazon, которые возвращают XML, который затем я хочу проанализировать с помощью lxml. Я написал несколько функций, которые отлично работают, чтобы загрузить XML и проанализировать его.

Каждая функция загружает XML, используя:

variable = lxml.etree.parse("http://...")

Это работает отлично, ПЕРВОЕ время его запуска. Однако, если я хочу загрузить второй URL-адрес (будь то тот же или другой) во время проходящего сеанса python, я получаю сообщение об ошибке:

lxml.etree.XMLSyntaxError: Attempt to load network entity http://...

(Конечно, эллипсы заменяются в обоих случаях остальной частью URL-адреса.)

Поэтому по какой-то причине я, похоже, не могу загрузить два документа XML, используя метод parse в выполняющемся сеансе python.

Кто-нибудь знает, что я могу делать неправильно, или у вас есть решение?

  • 0
    Это будет полезно. Если бы мы могли знать, какую версию Python вы используете
Теги:
lxml

1 ответ

3
Лучший ответ

Известная ошибка с ошибкой.

Используйте urllib2.urlopen(), чтобы получить объект file- и передать его в lxml.etree.parse()

  • 0
    Я пропустил этот отчет об ошибке, спасибо!
  • 2
    Вы также можете создать синтаксический анализатор с параметром no_network установленным в False : p = etree.XMLParser(no_network=False) а затем использовать его с etree.parse(uri, parser=p) или установить его в качестве синтаксического анализатора по умолчанию с etree.set_default_parser(p) (возможным недостатком может быть неожиданный доступ к сети для «вторичных» ресурсов, таких как dtd и т.д ...)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню