首页 > 解决方案 > 从获取请求的响应中解析和获取列表

问题描述

我正在尝试使用请求模块解析网站:

import requests
some_data = {'a':'',
             'b':''}
with requests.Session() as s:
    result = s.post('http://website.com',data=some_data)
    print(result.text)

该页面响应如下:

{
    "arrangetype":"U",
    "list": [
        {
            "product_no":43,
            "display_order":4,
            "is_selling":"T",
            "product_empty":"F",
            "fix_position":null,
            "is_auto_sort":false
        },
        {
            "product_no":44,
            "display_order":6,
            "is_selling":"T",
            "product_empty":"F",
            "fix_position":null,
            "is_auto_sort":false
        }
    ],
    "length":2
}

我发现与其解析完整的 HTML,不如处理响应,因为我想要的所有数据都在该响应中。

我想要得到的是 的值列表product_no,所以预期的结果是:

[43,44]

我该怎么做呢?

标签: pythonjsonparsingpython-requestsresponse

解决方案


使用 将您的 JSON 响应转换为字典json.loads(),并在列表理解中收集您的结果。

演示:

from json import loads

data = """{
    "arrangetype":"U",
    "list": [
        {
            "product_no":43,
            "display_order":4,
            "is_selling":"T",
            "product_empty":"F",
            "fix_position":null,
            "is_auto_sort":false
        },
        {
            "product_no":44,
            "display_order":6,
            "is_selling":"T",
            "product_empty":"F",
            "fix_position":null,
            "is_auto_sort":false
        }
    ],
    "length":2 
}"""

json_dict = loads(data)

print([x['product_no'] for x in json_dict['list']])
# [43, 44]

完整代码:

import requests
from json import loads

some_data = {'a':'',
             'b':''}

with requests.Session() as s:
    result = s.post('http://website.com',data=some_data)
    json_dict = loads(result.text)
    print([x["product_no"] for x in json_dict["list"]])

推荐阅读