2015-10-13 65 views
2

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

这里是我的代码:

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

不要使用美丽的汤来处理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的内容,包含HTML键,就可以像这样分析它:

BeautifulSoup(newDictionary.content, "lxml") 

您可能需要不同的解析器尝试,如果你有零星的HTML。

+0

请看我编辑的问题,新c ode返回json数据,但现在我想在数据内部添加一些标签,我该怎么做? –

+0

标签?你的json中的标签是什么意思? –

+0

数据是json格式,但里面有html代码。我需要检索。 –

0

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

工作实施例 - 测试与Python 2.6.92.7.103.3.53.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