Разбор сжатого XML-канала в ElementTree
Я пытаюсь проанализировать следующий канал в ElementTree в Python: "http://smarkets.s3.amazonaws.com/oddsfeed.xml"(предупреждение большого файла)
Вот что я пробовал до сих пор:
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)
но, кажется, просто держисьcompressed_data = feed.read()
бесконечно может быть ?? (Я знаю, что это большой файл, но он кажется слишком длинным по сравнению с другими несжатыми фидами, которые я проанализировал, и этот большой размер убивает все приросты пропускной способности от сжатия gzip).
Далее я попробовалrequests
, с
url = "http://smarkets.s3.amazonaws.com/oddsfeed.xml"
headers = {'accept-encoding': 'gzip, deflate'}
r = requests.get(url, headers=headers, stream=True)
но сейчас
tree=ET.parse(r.content)
или же
tree=ET.parse(r.text)
но они поднимают исключения.
Какой правильный способ сделать это?