Я пишу код для работы с 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.
Кто-нибудь знает, что я могу делать неправильно, или у вас есть решение?
Используйте urllib2.urlopen()
, чтобы получить объект file- и передать его в lxml.etree.parse()
no_network
установленным в False
: p = etree.XMLParser(no_network=False)
а затем использовать его с etree.parse(uri, parser=p)
или установить его в качестве синтаксического анализатора по умолчанию с etree.set_default_parser(p)
(возможным недостатком может быть неожиданный доступ к сети для «вторичных» ресурсов, таких как dtd и т.д ...)