1
votes

Comment puis-je extraire uniquement le sujet: le résultat de cette chaîne

J'ai donc écrit un code pour récupérer les résultats de mes examens lorsqu'ils seront publiés sur le site Web. Mais je ne peux pas comprendre comment afficher les résultats au format subjectName: subjectResults.

Ma sortie est quelque chose comme ça,

Résultats trouvés b '{"exam": "G.C.E. (O / L) EXAMEN "," année ":" 2018 "," nom ":" NANAYAKKARA IGALA ARACHCHIGE NAVINDU THARUKA PERERA "," indexNo ":" 80299920 "," nic ": null," districtRank ": null," islandRank ": null," marks ": null," status ": null," zScore ": null," stream " : null, "subjectResults": [{"subjectName": "BUDDHISM", "subjectResult": "A"}, {"subjectName": "SINHALA LANGUAGE & LITT. "," SubjectResult ":" A "}, {" subjectName ":" ANGLAIS LANGUAGE "," subjectResult ":" A "}, {" subjectName ":" MATHEMATICS "," subjectResult ":" A "}, {" subjectName ":" HISTORY "," subjectResult ":" A "}, {" subjectName ":" SCIENCE "," subjectResult ":" B "}, {" subjectName ":" DRAMA & THEATRE (SINHALA) "," subjectResult ":" A "}, {" subjectName ":" BUSINESS & ACCT. ÉTUDES "," subjectResult ":" A "}, {" subjectName ":" INFOR. & COMM. TECHNOLOGIE "," subjectResult ":" A "}]," studentInfo ": [{" param ":" Examination "," value ":" G.C.E. (O / L) EXAMEN "}, {" param ":" Year "," value ":" 2018 "}, {" param ":" Name "," value ":" NANAYAKKARA IGALA ARACHCHIGE NAVINDU THARUKA PERERA "}, {" param ":" Index Number "," value ":" 80299920 "}, {" param ":" NIC Number "," value ":" "}]} '

Je n'ai besoin que des sujets et de leurs résultats listés ligne par ligne.

Voici mon script

import requests
import re
import time



index_number = "80299920"

URL = f'https://result.doenets.lk/result/service/OlResult?index={index_number}&nic='

while True:
    try:
        req = requests.get(URL)
        x = req.content.decode('utf-8')
        search = re.findall(r'\"subjectResults\":\[]', x)
        if search:
            print("No results yet")
            time.sleep(0.001)
            continue
        else:
            print("Results found")
            res = requests.get(f'https://result.doenets.lk/result/service/OlResult?index={index_number}&nic=')
            results=res.content
            print(results)
            exit()
    except Exception:
        print("ok")


0 commentaires

3 Réponses :


4
votes

Le résultat est au format JSON , vous pouvez donc l'analyser et l'utiliser comme python dict

res = requests.get(...)
result = res.get_json() # or result = json.loads(res.text)

for item in result['subjectResults']:
    print(item['subjectName'] + ":" + item['subjectResult'])

# Printing

BUDDHISM:A
SINHALA LANGUAGE & LITT.:A
ENGLISH LANGUAGE:A
MATHEMATICS:A
HISTORY:A
SCIENCE:B
DRAMA & THEATRE(SINHALA):A
BUSINESS & ACCT. STUDIES:A
INFOR. & COMM. TECHNOLOGY:A


0 commentaires

2
votes

Votre chaîne est un json, vous pouvez donc la charger en tant que dict python et parcourir vos résultats.

   import json

results = b'{"examination":"G.C.E. (O/L) EXAMINATION","year":"2018","name":"NANAYAKKARA IGALA ARACHCHIGE NAVINDU THARUKA PERERA","indexNo":"80299920","nic":null,"districtRank":null,"islandRank":null,"marks":null,"status":null,"zScore":null,"stream":null,"subjectResults":[{"subjectName":"BUDDHISM","subjectResult":"A"},{"subjectName":"SINHALA LANGUAGE & LITT.","subjectResult":"A"},{"subjectName":"ENGLISH LANGUAGE","subjectResult":"A"},{"subjectName":"MATHEMATICS","subjectResult":"A"},{"subjectName":"HISTORY","subjectResult":"A"},{"subjectName":"SCIENCE","subjectResult":"B"},{"subjectName":"DRAMA & THEATRE(SINHALA)","subjectResult":"A"},{"subjectName":"BUSINESS & ACCT. STUDIES","subjectResult":"A"},{"subjectName":"INFOR. & COMM. TECHNOLOGY","subjectResult":"A"}],"studentInfo":[{"param":"Examination","value":"G.C.E. (O/L) EXAMINATION"},{"param":"Year","value":"2018"},{"param":"Name","value":"NANAYAKKARA IGALA ARACHCHIGE NAVINDU THARUKA PERERA"},{"param":"Index Number","value":"80299920"},{"param":"NIC Number","value":""}]}'

result_dict = json.loads(results)

for subject in result_dict['subjectResults']:
    print('Name: ', subject['subjectName'])
    print('Result: ', subject['subjectResult'])
    print()

# prints
"""
Name:  BUDDHISM
Result:  A

Name:  SINHALA LANGUAGE & LITT.
Result:  A

Name:  ENGLISH LANGUAGE
Result:  A

Name:  MATHEMATICS
Result:  A

Name:  HISTORY
Result:  A

Name:  SCIENCE
Result:  B

Name:  DRAMA & THEATRE(SINHALA)
Result:  A

Name:  BUSINESS & ACCT. STUDIES
Result:  A

Name:  INFOR. & COMM. TECHNOLOGY
Result:  A
"""


1 commentaires

Une réponse sans explication ne vaut rien;)



1
votes

Quelque chose comme ceci:

import requests
import re
import time

index_number = "80299920"

URL = f'https://result.doenets.lk/result/service/OlResult?index={index_number}&nic='

while True:
    req = requests.get(URL)
    results = req.content
    if b"subjectResults" in results:
        for course in json.loads(results)['subjectResults']:
            print(f"{course['subjectResult']:2} {course['subjectName']}")
        break

    time.sleep(300)


1 commentaires

Veuillez donner une explication, les réponses basées uniquement sur le code ne valent pas grand-chose