2016-11-08 73 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

相關問題