#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 и т.д.)