Analizar la alimentación xml comprimida en ElementTree

Estoy tratando de analizar el siguiente feed en ElementTree en python: "http://smarkets.s3.amazonaws.com/oddsfeed.xml"(archivo grande de advertencia)

Esto es lo que he intentado hasta ahora:

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)

pero parece que solo aguantacompressed_data = feed.read()¿infinitamente tal vez? (Sé que es un archivo grande, pero parece demasiado largo en comparación con otras fuentes no comprimidas que analicé, y este tamaño está matando cualquier ganancia de ancho de banda de la compresión gzip en primer lugar).

Luego probérequests, con

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

pero ahora

tree=ET.parse(r.content)

o

tree=ET.parse(r.text)

pero estos plantean excepciones.

¿Cuál es la forma correcta de hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta