2016-11-08 39 views
0

我有一个'requests.models.Response'对象,我想解析它。在响应上调用response.json()会生成一个“unicode”对象。Python2.7如何检查响应是否是json(如果是,则解析它)?

主要 - 我如何检查响应是否为json?

其次 - 我可以用bs4解析json'unicode'对象吗?

我的代码如下:

import requests 

post_hdrs = { 
    'type': 'regulated', 
    'url': 'node/17' 
} 

r = requests.post(
    url='https://www.gfsc.gg/fetch-records-for-companies-table', 
    data=post_hdrs, 
) 

json_data = r.json() 

回答

1

内容类型是标头:

>>> r.headers['Content-Type'] 
'application/json' 

获取JSON数据后,用BeautifulSoup解析它。例如:

import requests 
from bs4 import BeautifulSoup 

post_hdrs = { 
    'type': 'regulated', 
    'url': 'node/17' 
} 

r = requests.post(
    url='https://www.gfsc.gg/fetch-records-for-companies-table', 
    data=post_hdrs, 
) 

print r.headers['Content-Type'] 
print 
data = r.json() 
soup = BeautifulSoup(data) 
for c in soup.findAll('td',attrs={'class':'Company Name'}): 
    print c.text 

输出:

application/json 

2Mi Financial Services Limited 
71FS Insurance Company Limited 
7L Capital Partners Emerging Europe L.P. 
7L Equity Partners (EE) Limited 
    : : : 
+0

谢谢你,我正在寻找。 – Astrophe

+1

@Astrophe它很奇怪,它是一个返回HTML的json响应。有一层不应该被需要的间接寻址,但这是服务器的问题。感谢您提供一个工作示例。 –

+0

感谢您澄清该响应返回HTML。我有这样的印象,即json响应会是字典中的键和值 - 这就是我问这个问题的原因。 – Astrophe

0

如果它不是一个有效的JSON对象,该方法将抛出一个异常(ValueError异常如果没有记错),你可以赶上。这是Python“请求宽恕”的工作方式。

至于处理unicode的,这应该做的伎俩:

import ast 
ast.literal_eval(r.text) 
+0

由于我不熟悉的AST。我的输出没有错误,但我不知道如何解析它 - 我不想使用正则表达式,然后发现我可以将它传递给例如BS4。解析unicode有用吗? – Astrophe

+0

你的意思是r.json()返回你的Unicode或一个正确的JSON?如果你在'r.text'中得到的是保存json对象的unicode,那么我发布的代码将使它成为一个合适的json。 –

+0

r.json()和r.text都是unicode。 – Astrophe

相关问题