Перечень ВАК — это один PDF на тысячу с лишним страниц. Вопрос к нему обычно один: в какие издания можно подать статью по специальности X прямо сейчас.
vak-parser берёт актуальную редакцию перечня с сайта ВАК и выдаёт издания,
у которых нужная специальность действует на сегодняшний день — таблицей и
машиночитаемым JSON.
Нужен Python 3.10 или новее.
pipx install git+https://github.com/AndreyZa/vak-parser
vak-parser 2.3.8
Разово, без установки:
pipx run --spec git+https://github.com/AndreyZa/vak-parser vak-parser 2.3.8
Код специальности — по номенклатуре ВАК (2.3.8, 5.2.3, 1.2.2); можно
перечислить несколько сразу. Первый запуск качает ~10 МБ PDF и разбирает его
пару минут; дальше файл берётся из cache/.
out/vak-2.3.8.md— таблица: номер в перечне, издание, ISSN, смежные специальности;out/vak-2.3.8.json— то же машиночитаемо, плюс сроки действия;out/source.json— какая редакция перечня использована, её URL и sha256.
Повторный запуск с теми же кодами по тому же перечню и на ту же дату —
мгновенный: готовая выдача в out/ переиспользуется, разбор пропускается.
С --json всё уходит одним документом в stdout, на диск не пишется ничего:
vak-parser 2.3.8 --json | jq '.found["2.3.8"] | length'
| ключ | зачем |
|---|---|
--as-of ДД.ММ.ГГГГ |
считать действие на другой день, а не на сегодня |
--pdf ФАЙЛ |
разобрать свой файл перечня, ничего не качая |
--source official|mirror |
не выбирать источник автоматически |
--refresh |
перекачать PDF, даже если он уже в cache/ |
--out КАТАЛОГ, --cache КАТАЛОГ |
куда писать выдачу и качать PDF |
--json, --quiet |
JSON в stdout; без прогресса |
Полный список — vak-parser --help. Коды возврата: 0 — что-то нашлось,
3 — не нашлось ничего, 1 — источник недоступен, 2 — неверный вызов.
Первоисточник — сайт ВАК, https://vak.gisnauka.ru/documents/editions. Он
открывается не из всех сетей (за пределами России обычно не открывается
вовсе). Если сайт не ответил, инструмент громко предупреждает и берёт
зеркало ЦНПА МГТУ им. Баумана.
Зеркало отстаёт от официального сайта; то, что ответ построен на нём, видно в
шапке выдачи и в out/source.json. Если в cache/ уже лежит редакция не
старее зеркальной, берётся она — заранее скачанный перечень продолжает
работать и совсем без сети.
Издание попадает в выдачу, только если срок действия нужной специальности не закрыт. У журнала бывает несколько блоков специальностей с разными датами, и самая частая ручная ошибка — засчитать код из блока, закрытого несколько лет назад. Если сайт или таблицу переверстают, инструмент скажет об этом и завершится с ошибкой — а не отдаст молча неполный список.
git clone https://github.com/AndreyZa/vak-parser && cd vak-parser
python3 -m venv .venv && .venv/bin/pip install -e .
.venv/bin/vak-parser 2.3.8
.venv/bin/python -m unittest discover -s tests # тесты, без сети
Как устроен разбор PDF и почему именно так — в комментариях vak_parser.py.
MIT, см. LICENSE.