Как извлечь информацию из части XML на примере NCBI (PubMed) Entrez API
Проблема NCBI Entrez
Мне было необходимо извлечь общую информацию о гене из публичной БД NCBI.
К сожалению, их Entrez API на нужный мне запрос возвращает много ненужной мне информации - мегабатйты.
Таким образом возникла задача получить только общее описание гена из начала возвращаемого API XML, не загружая его полностью.
В Python для xml.sax можно зарегистрировать обработчик, который будет получать уже извлеченные из документа тэги на лету, еще в процессе разбора XML:
Детальный пример использования такого обработчика можно увидеть в xml_stream.py
Также есть возможность передавать в xml.sax документ XML кусочек за кусочком:
Прекрасно, с парсингом частичного XML мы разобрались.
Что насчет частичной загрузки ответа с сервера? Самый простой случай если сервер поддерживает выдачу ответа частями.
Но это не обязательное условие - мы можем просто прервать загрузку, как только мы получим нужную нам часть. Например requests поддерживает поточную загрузку:
Теперь вы готовы написать весь код.
Как пример вы можете посмотреть на http-stream-xml. Задачу получения общего описания генов из NCBI Entrez можно решить с его помощью в две строки: