lxml загружает только один сетевой объект перед запуском XMLSyntaxError

#python #lxml

#python #lxml

Вопрос:

Я пишу код для работы с 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.

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

Комментарии:

1. Это будет полезно. Если бы мы могли знать, какую версию python вы используете

Ответ №1:

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

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

Комментарии:

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