Как я могу извлечь только тему: результат из этой строки - PullRequest
1 голос
/ 27 апреля 2020

Поэтому я написал код, чтобы получить результаты экзамена, когда он будет опубликован на сайте. Но я не могу понять, как выводить результаты в формате subjectName: subjectResults.

Мой вывод выглядит примерно так:

Результаты найдены b '{"экзамен": " G. C .E. (O / L) ЭКСПЕРТИЗА "," year ":" 2018 "," name ":" NANAYAKKARA IGALA ARACHCHIGE NAVINDU THARUKA PERERA "," indexNo ":" 80299920 "," ni c ": нулевой," districtRank ": нулевой," islandRank ": нулевой," знаки ": нулевой," статус ": нулевой," zScore ": нулевой," поток ": нулевой," subjectResults ": [{" Subjectname ": "БУДДИЗМ", "subjectResult": "A"}, {"subjectName": "SINHALA LANGUAGE & LITT.", "SubjectResult": "A"}, {"subjectName": "АНГЛИЙСКИЙ ЯЗЫК", "subjectResult": " А "}, {" SubjectName ":" МАТЕМАТИКА " "subjectResult": "А"}, { "SubjectName": "История", "subjectResult": "А"}, { "SubjectName": "Наука"," subjectResult ":" B "}, {" subjectName ":" DRAMA & THEATER (SINHALA) "," subjectResult ":" A "}, {" subjectName ":" БИЗНЕС И АКТИВНЫЕ ИССЛЕДОВАНИЯ "," 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»: «NI C Number», «value»: «»}]} '

Мне нужно только предметы и их результаты перечисляются построчно.

Вот мой сценарий

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

Ответы [ 3 ]

4 голосов
/ 27 апреля 2020

Результат - JSON формат, поэтому вы можете проанализировать его и использовать как 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
2 голосов
/ 27 апреля 2020

Ваша строка - json, поэтому вы можете загрузить ее как python диктовку и просмотреть результаты.

   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 голос
/ 27 апреля 2020

Примерно так:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...