Parsing komprimierten XML-Feed in ElementTree

Ich versuche, den folgenden Feed in ElementTree in Python zu analysieren: "http: //smarkets.s3.amazonaws.com/oddsfeed.xm "(Warnung vor großer Datei)

Hier ist was ich bisher ausprobiert habe:

feed = urllib.urlopen("http://smarkets.s3.amazonaws.com/oddsfeed.xml")

# feed is compressed
compressed_data = feed.read()
import StringIO
compressedstream = StringIO.StringIO(compressed_data)
import gzip
gzipper = gzip.GzipFile(fileobj=compressedstream)
data = gzipper.read()

# Parse XML
tree = ET.parse(data)

aber es scheint nur zu hängencompressed_data = feed.read() unendlich vielleicht ?? (Ich weiß, dass es sich um eine große Datei handelt, aber im Vergleich zu anderen nicht komprimierten Feeds, die ich analysiert habe, scheint sie zu lang zu sein, und diese große Datei macht die Bandbreitengewinne durch die gzip-Komprimierung zunichte.)

Nächste habe ich versuchtrequests, mit

url = "http://smarkets.s3.amazonaws.com/oddsfeed.xml"
headers = {'accept-encoding': 'gzip, deflate'}
r = requests.get(url, headers=headers, stream=True)

aber jetz

tree=ET.parse(r.content)

ode

tree=ET.parse(r.text)

aber diese werfen Ausnahmen auf.

Was ist der richtige Weg, um dies zu tun?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage