Python Requests-Paket: Umgang mit XML-Antworten

114

Ich mag das requestsPaket und seine komfortable Art, mit JSON-Antworten umzugehen, sehr.

Leider habe ich nicht verstanden, ob ich auch XML-Antworten verarbeiten kann. Hat jemand Erfahrung im Umgang mit XML-Antworten mit dem requestsPaket? Muss ein weiteres Paket für die XML-Dekodierung hinzugefügt werden?

Andy
quelle

Antworten:

199

requestsbehandelt das Parsen von XML-Antworten nicht, nein. XML-Antworten sind von Natur aus viel komplexer als JSON-Antworten. Die Serialisierung von XML-Daten in Python-Strukturen ist bei weitem nicht so einfach.

Python wird mit integrierten XML-Parsern geliefert. Ich empfehle Ihnen, die ElementTree-API zu verwenden :

import requests
from xml.etree import ElementTree

response = requests.get(url)

tree = ElementTree.fromstring(response.content)

Wenn die Antwort besonders groß ist, verwenden Sie einen inkrementellen Ansatz:

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`

Das externe lxml-Projekt baut auf derselben API auf, um Ihnen noch mehr Funktionen und Leistung zu bieten.

Martijn Pieters
quelle