尝试使用Python从URL获取json数据

时间:2015-10-13 12:08:21

标签: python json

我正在学习从链接获取json数据并在以后使用该数据。但我收到错误:“运行时错误:调用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())

2 个答案:

答案 0 :(得分:2)

不要使用漂亮的汤来处理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()解析。

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

BeautifulSoup(newDictionary.content, "lxml")

如果你有碎片html,你可能需要尝试不同的解析器。

答案 1 :(得分:0)

以下是如何使用已作为json.loads()对象加载的各种JSON数据的示例。

工作示例 - 使用Python 2.6.9 2.7.10 以及 3.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