Python2.7如何检查响应是否为json(如果是,则进行解析)?

时间:2016-11-08 13:09:16

标签: json python-2.7 unicode python-requests bs4

我有一个' requests.models.Response'我要解析的对象。在响应上调用response.json()会产生一个' unicode'对象

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

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

我的代码如下:

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()

2 个答案:

答案 0 :(得分: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
   :    :    :

答案 1 :(得分:0)

如果它不是有效的json对象,则该方法将抛出异常(如果内存服务,则为ValueError),您可以捕获该异常。它的Python"请求原谅"工作方式。

至于处理unicode,这应该可以解决问题:

import ast
ast.literal_eval(r.text)