Пакет запросов Python: обработка ответа xml

#python #xml #text #python-3.5

#python #xml #httprequest #python-запросы

Вопрос:

Мне очень нравится requests пакет и его удобный способ обработки ответов JSON.

К сожалению, я не понял, могу ли я также обрабатывать ответы XML. Кто-нибудь сталкивался с обработкой XML-ответов с requests помощью пакета? Необходимо ли включать другой пакет для декодирования XML?

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

1. В случае, если вы используете pydantic , вы можете полагаться на pydantic-xml для преобразования ваших XML-данных в схему pydantic

Ответ №1:

requests не обрабатывает синтаксический анализ XML-ответов, нет. XML-ответы намного сложнее по своей природе, чем ответы JSON, то, как вы сериализуете XML-данные в структуры Python, не так просто.

Python поставляется со встроенными анализаторами XML. Я рекомендую вам использовать API ElementTree:

 import requests
from xml.etree import ElementTree

response = requests.get(url)

tree = ElementTree.fromstring(response.content)
  

или, если ответ особенно велик, используйте инкрементный подход:

 response = requests.get(url, stream=True)

# if the server sent a Gzip or Deflate compressed response, decompress
# as we read the raw stream:
response.raw.decode_content = True

events = ElementTree.iterparse(response.raw)

for event, elem in events:
    # do something with `elem`
  

Внешний проект lxml основан на том же API, чтобы предоставить вам больше возможностей и возможностей.

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

1. Я всегда использовал lxml, не знал, что это уже существует во встроенном python.

Ответ №2:

Гораздо более простой способ — преобразовать XML в a dict с помощью пакета xmltodict

 response = requests.get('http://blabla.com')
dict_data = xmltodict.parse(response.content)
  

Теперь dict_data это просто словарь Python.

Вы можете установить его с помощью pip: pip install xmltodict

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

1. Когда я пытаюсь использовать это, я получаю «Ошибка ExpatError: неверно сформированный (недопустимый токен): строка 1, столбец 2″. Это начало текст XML: <?xml version=’1.0′ encoding=’UTF-8′?><?xml-stylesheet type=»text/xsl» href=»SettlementSummary.xsl»?>

2. Привет @otterdog2000, я думаю, что ваш вопрос выходит за рамки этой проблемы, вам следует открыть еще один