相关疑难解决方法(0)

json响应出了什么问题

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 json

3
推荐指数
1
解决办法
2783
查看次数

将压缩的xml提要解析为ElementTree

我正在尝试在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)

但这些提出了例外.

这样做的正确方法是什么?

python xml gzip elementtree

2
推荐指数
1
解决办法
6046
查看次数

标签 统计

python ×2

elementtree ×1

gzip ×1

json ×1

xml ×1