2017-01-18 6 views
0

Ich benutze Python 'Anfragen', um eine Anfrage an einen Server zu senden. Das Ergebnis wird als REST-Antwort zurückgegeben. Jetzt brauche ich wie verschiedene Felder oder Abschnitte des Response-Objekt zu erhalten .... Mein anfordernden Skript ist als:Parsen Sie eine REST-Antwort mit Python

import json 
import requests 

proxies = { 
    'http': 'http://10.10.80.12:3128', 
    'https': 'http://10.10.80.12:3128' 
} 
url = 'http://achecker.ca/checkacc.php' 

payload = {'uri': 'https://www.google.com', 
     'id': 'XXXXXXXXXXXXXXXXXXXXXXXXXX', 
     'output': 'rest', 
     'guide': 'WCAG2-AA', 
     'offset': '10' 
     } 

response = requests.get(url,params=payload,proxies=proxies) 
print response.text 

Der Teil des Ergebnisses durch die obige Skript zurückgegeben wird, wie:

<resultset> 
 
<summary> 
 
<status>FAIL</status> 
 
<sessionID>8e03e40492a7f16a2b63c47b07588f81c746faca</sessionID> 
 
<NumOfErrors>2</NumOfErrors> 
 
<NumOfLikelyProblems>1</NumOfLikelyProblems> 
 
<NumOfPotentialProblems>113</NumOfPotentialProblems> 
 

 
<guidelines> 
 
<guideline>WCAG 2.0 (Level AA)</guideline> 
 

 
</guidelines> 
 
</summary> 
 
</resultset> 
 

Aus dem obigen Ergebnis möchte ich Status, NUMOFERRORS, NumOfLikelyProblems, NumOfPotentialProblems abzurufen. Beautifulsoup kann eine Lösung sein, aber ich möchte es anders machen.

Antwort

0

Die Antwort erhalten Sie im XML-Format. Sie müssen die folgende XML-Zeichenfolge in ein Wörterbuch konvertieren. Für die obige Aufgabe können Sie xmltodict (https://github.com/martinblech/xmltodict) verwenden. Der Ablauf ist wie folgt: -

import json 
import xmltodict 
response_text = response.text 
response_dict = json.dumps(xmltodict.parse(response_text)). 

Das resultierende dict für die oben erwähnte Reaktion wird als

folgt
{ 
    "resultset": { 
    "summary": { 
     "status": "FAIL", 
     "sessionID": "8e03e40492a7f16a2b63c47b07588f81c746faca", 
     "NumOfErrors": "2", 
     "NumOfLikelyProblems": "1", 
     "NumOfPotentialProblems": "113", 
     "guidelines": { 
     "guideline": "WCAG 2.0 (Level AA)" 
     } 
    } 
    } 
} 

Nun ist es nur ein Wörterbuch, und Sie können die Schlüssel und ihre Werte zugreifen. Ich hoffe, dass dies Ihr Problem löst.

+0

Sir, ich schätze die rechtzeitige Antwort und das wird mir definitiv helfen. Aber ich bin nicht in der Lage, das Wörterbuch mit Hilfe von: response_dict ['Zusammenfassung'] ['NumOfErrors'] –

+0

Dies ist der Fehler, den ich bekomme .. TypeError: string-Indizes müssen ganze Zahlen sein, nicht str –

+0

Um den 'NumOfError' zu drucken verwenden response_dict ['resultset'] ['Zusammenfassung'] ['NumOfErrors'] –