【问题标题】:Trying to get json data from URL using Python尝试使用 Python 从 URL 获取 json 数据
【发布时间】:2016-08-28 06:36:06
【问题描述】:

我正在学习从链接中获取 json 数据并稍后使用该数据。但我收到错误:“RuntimeError:调用 Python 对象时超出最大递归深度”

这是我的代码:

import json
import requests
from bs4 import BeautifulSoup

url = "http://example.com/category/page=2&YII_CSRF_TOKEN=31eb0a5d28f4dde909d3233b5a0c23bd03348f69&more_products=true"
header = {'x-requested-with': 'XMLHttpRequest'}

mainPage = requests.get(url, headers = header)
xTree = BeautifulSoup(mainPage.content, "lxml")

newDictionary=json.loads(str(xTree))

print (newDictionary)

编辑:好的,我使用这个微小的变化得到了响应数据,这是新代码:

import json
import requests
from bs4 import BeautifulSoup

url = "http://example.com/category/page=2&YII_CSRF_TOKEN=31eb0a5d28f4dde909d3233b5a0c23bd03348f69&more_products=true"
header = {'x-requested-with': 'XMLHttpRequest'}

mainPage = requests.get(url, headers = header

print (mainPage.json())

【问题讨论】:

    标签: python json


    【解决方案1】:

    不要使用漂亮的汤来处理 json http 响应。使用请求之类的东西:

    url = "https://www.daraz.pk/womens-kurtas-shalwar-kameez/?pathInfo=womens-kurtas-shalwar-kameez&page=2&YII_CSRF_TOKEN=31eb0a5d28f4dde909d3233b5a0c23bd03348f69&more_products=true"
    header = {'x-requested-with': 'XMLHttpRequest'}
    t = requests.get(url, headers=True)
    newDictionary=json.loads(t)
    print (newDictionary)
    

    不能用json.loads()那样解析漂亮的soup对象。

    如果您在其中一些 json 键上有 HTML 数据,那么您可以使用漂亮的汤来单独解析这些字符串值。如果你的 json 中有一个名为 content 的键,包含 html,你可以像这样解析它:

    BeautifulSoup(newDictionary.content, "lxml")
    

    如果您有不完整的 html,您可能需要尝试不同的解析器。

    【讨论】:

    • 请看我编辑的问题,新代码返回 json 数据,但现在我想要数据中的一些标签,我该怎么做?
    • 标签? json 中的标签是什么意思?
    • 数据是json格式,但里面有html代码。我需要找回它。
    • 然后你需要用漂亮的汤来解析json键上的字符串数据,并按照通常的方式进行操作。您可能应该就此发布一个新问题。
    • 你能告诉我一些例子吗?
    【解决方案2】:

    下面是一个例子,说明如何使用已经加载为json.loads()的对象的各种JSON数据。

    工作示例 - 用 Python 2.6.92.7.103.3.5 和 3.5.0

    import json
    
    json_data = '''
    {
        "array": [
            1,
            2,
            3
        ],
        "boolean": true,
        "null": null,
        "number": 123,
        "object": {
            "a": "b",
            "c": "d",
            "e": "f"
        },
        "string": "Hello World"
    }
    '''
    
    data = json.loads(json_data)
    
    list_0 = [
        data['array'][0],
        data['array'][1],
        data['array'][2],
        data['boolean'],
        data['null'],
        data['number'],
        data['object']['a'],
        data['object']['c'],
        data['object']['e'],
        data['string']
    ]
    
    print('''
    array value 0           {0}
    array value 1           {1}
    array value 2           {2}
    boolean value           {3}
    null value              {4}
    number value            {5}
    object value a value    {6}
    object value c value    {7}
    object value e value    {8}
    string value            {9}
    '''.format(*list_0))
    

    输出

    array value 0           1
    array value 1           2
    array value 2           3
    boolean value           True
    null value              None
    number value            123
    object value a value    b
    object value c value    d
    object value e value    f
    string value            Hello World
    

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 2022-11-12
      • 2016-01-18
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多