Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vak-parser

Перечень ВАК — это один 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.

About

Издания перечня ВАК по специальности: разбор PDF перечня по координатам колонок, актуальная редакция берётся с сайта

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages