Видимо потому что каждое открытие это запрос типа ...JsonGetChildrenConcepts?ConceptId=II&useHtml=true&showAdoptedChildren=true
Так что надо получить все номера и делать запросы.
Он показывает все строки с текстом.
Подскажите как теперь пробежать по всем элементам и вернуть innerText.
Тут Select не нахожу.
Или может можно както так написать?
document.querySelectorAll('.ygtvrow > innerText')
не … дичь какая то … (((
Сделал вот такую хрень:
var t = Array.from(document.querySelectorAll('.ygtvitem'))
for (let cnt = 0; cnt < 5; cnt++){
t = Array.from(document.querySelectorAll('.ygtvitem'))
for (let index = 0; index < t.length; index++) {
t[index].querySelectorAll(".ygtvcell.ygtvtp").forEach(s=>s.click());
}
}
Вроде бы работает но открывает почему то не больше 2 - 3 вкладок …
Может оно где-то доступно в другом виде?
Чот не нашел нигде в норм виде для машин, но например Free 2022 ICD-10-CM Codes выглядит проще, ходить рекурсивно по a.identifier
Чет какие то заморочки с получением ключа авторизации.
Вообще странно что такие проблемы с получением полной версии на английском. Русские версии прям сразу в любом виде находятся. Неужели это прям такая секретная информация чтоли …
Так может проще все-таки слать самому запросы и разбирать ответы? Сначала https://icd.who.int/browse10/2019/en/JsonGetRootConcepts?useHtml=true, затем https://icd.who.int/browse10/2019/en/JsonGetChildrenConcepts?ConceptId=I&useHtml=true&showAdoptedChildren=true (как уже указал @AlexP), перебирая все ID из ответа, у которых isLeaf равен false.
Ну ключ вроде как дают просто после регистрации бесплатно, только OAuth осложняет, но для всех языков есть библиотеки стандартные или сторонние, и там даже есть пример C# ICD API Authentication - ICD-API Homepage
Сложнее понять дает ли API возможность выгрузить всё, возможно он для другого.
Но думаю можно как минимум выполнять GET /icd/entity/{id} рекурсивно начиная с корневых.
Еще его вроде бы можно установить локально, может там есть какой-то файл БД Installing ICD-API as a Windows Service - ICD-API Homepage
Ну и как вариант можно просто использовать эту локальную штуку, не надо будет потом думать как обновить данные.
import requests
from datetime import datetime
import time
requests_count = 0
url_globals = {"null": None, "false": False, "true": True}
default_sleep_time = 5
sleep_time = default_sleep_time
err_msg = "You do not have permission to view this directory or page."
def my_requests_get(url):
global requests_count
requests_count += 1
print(requests_count, url)
try:
r = requests.get(url)
return r.text
except requests.Timeout as err:
print(err.message)
return err_msg
def add_children(icd_list):
for elem in icd_list:
if elem['isLeaf']:
continue
while True:
text = my_requests_get('https://icd.who.int/browse10/2019/en/JsonGetChildrenConcepts?ConceptId=%s&useHtml=true&showAdoptedChildren=true' % elem['ID'])
if err_msg in text:
print("Sleeping %d seconds" % sleep_time)
time.sleep(sleep_time)
sleep_time *= 2
else:
sleep_time = default_sleep_time
break
resp_list = eval(text, url_globals)
elem["children"] = resp_list
add_children(resp_list)
start_time = datetime.now().time()
print(start_time)
text = my_requests_get('https://icd.who.int/browse10/2019/en/JsonGetRootConcepts?useHtml=true')
resp_list = eval(text, url_globals)
add_children(resp_list)
with open('icd_result.txt', 'w') as f:
f.write("%s" % resp_list)
print(requests_count, start_time, datetime.now().time())
Отработала за 10 минут и 1929 запросов (были повторы запросов, так как сайту парсинг не понравился ). Всего в результирующем файле 12597 записей получилось. icd_result.txt (3.9 МБ)
Остается только пройтись по результату и преобразовать в желаемый вид (например, подсчет записей):
def add_count(l):
global id_count
for elem in l:
if "children" in elem:
id_count += len(elem["children"])
add_count(elem["children"])
with open('icd_result.txt', 'r') as f:
resp_list = eval(f.read())
id_count = len(resp_list)
add_count(resp_list)
print(id_count)
А функция “eval” как выглядит?? чего то не вижу в коде.
Ну с английским разобрались. Но потом нужно каким то образом с русской свести. А русского апи тут нету.
Так то я вчера уже нарыл какие то базы и свел в нужную таблицу. Но теперь просто интересно если вдруг найдется русский апи к этому ресурсу то это будет супер решение. ))
А вот нашел. Русскую csv можно скачать отсюда https://mkb10.su/download.html и потом взяв коды запросить их с английской апи. И будет то что надо. )))