json响应正常工作:
obj = urllib.urlopen("http://www.omdbapi.com/?t=Fight Club")
response_str = obj.read()
response_json = simplejson.loads(response_str)
Run Code Online (Sandbox Code Playgroud)
上面的代码发出json请求,如下所示:
{
"Title":"Fight Club",
"Year":"1999",
"Rated":"R",
"Released":"15 Oct 1999",
......
"Response":"True"
}
Run Code Online (Sandbox Code Playgroud)
我现在可以睡觉了...但是
json响应无法正常工作:
obj = urllib.urlopen("https://api.stackexchange.com/2.1/answers?order=desc&sort=activity&site=stackoverflow")
response_str = obj.read()
response_json = simplejson.loads(response_str)
Run Code Online (Sandbox Code Playgroud)
上面的代码发出json请求,如下所示:
{
"items": [
{
"question_id": 18384375,
"answer_id": 18388044,
"creation_date": 1377195687,
"last_activity_date": 1377195687,
"score": 0,
"is_accepted": false,
"owner": {
"user_id": 1745001,
"display_name": "Ed Morton",
"reputation": 10453,
"user_type": "registered",
"profile_image": "https://www.gravatar.com/avatar/99a3ebae89496eb16afe453aae97f5be?s=128&d=identicon&r=PG",
"link": "/sf/users/122150101/"
}
},
{
"question_id": 18387447,
"answer_id": 18388040,
"creation_date": 1377195667,
"last_activity_date": 1377195667,
"score": 0,
"is_accepted": …Run Code Online (Sandbox Code Playgroud) 我正在尝试在python中将以下Feed解析为ElementTree:" 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)
Run Code Online (Sandbox Code Playgroud)
但似乎只是坚持下去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)
Run Code Online (Sandbox Code Playgroud)
但现在
tree=ET.parse(r.content)
Run Code Online (Sandbox Code Playgroud)
要么
tree=ET.parse(r.text)
Run Code Online (Sandbox Code Playgroud)
但这些提出了例外.
这样做的正确方法是什么?