Публикация была переведена автоматически. Исходный язык: Русский
Знакомая делает сервис профориентации для школьников. Нужна база всех колледжей Казахстана: названия, города, специальности. Официальной открытой базы нет. Есть разрозненные сайты, PDF-файлы, устаревшие списки.
Нашёл сайт с каталогом колледжей. Там всё: регионы, города, специальности, контакты. Но нет API, нет экспорта. Только HTML с таблицами. Решил парсить.
Написал Puppeteer-скрипер: заходит на сайт, выбирает регион, открывает список городов, в каждом городе ищет колледжи, сохраняет данные в JSON. Первая версия работала 2 часа, парсила 500 колледжей. Медленно, но работало.
Оптимизировал: вместо последовательного прохода по ссылкам, сделал параллельный. Открыл 10 браузерных вкладок одновременно, каждая парсит свой регион. Время упало до 20 минут. Нагрузка на процессор выросла, но результат того стоил.
Проблемы были смешные:
- Некоторые страницы грузились бесконечно — добавил таймаут 30 секунд
- Некоторые колледжи имели название на казахском и русском — парсил оба
- Некоторые специальности были дубликатами с разным написанием — дедупликация через Set
Результат: три JSON файла:
- regions.json — список регионов Казахстана
- cities.json — города с привязкой к регионам
- colleges.json — 15161 запись о колледжах со специальностями
Размер colleges.json — 15KB. В нём вся образовательная система страны. Для сравнения: обычная фотография с телефона весит 2-3MB. База данных всех колледжей — 15KB.
Знакомая взяла эти файлы, загрузила в свою базу данных, сделала на их основе поисковик. Школьник вводит "хочу учиться на программиста в Алматы" → система фильтрует JSON → показывает 20 подходящих колледжей. Без сервера, без SQL,
просто фильтрация массива в JavaScript.
Обновление данных — отдельная история. Колледжи не меняются часто, но раз в год нужно обновлять. Запускаю скрипт заново, он парсит свежие данные, сравниваю с прошлогодним файлом через diff. Удалились 5 колледжей, добавились 12
новых, изменились названия у 8. Обновляю JSON за 5 минут.
Сейчас этот скрипт лежит в папке scrapers/college-scraper.js, 9KB кода. Запускаю раз в год. Он молча делает работу, которая вручную заняла бы недели: открытие сотен страниц, копирование данных, структурирование в таблицы.
Знакомая спросила: "Это легально?". Я ответил: "Данные публичные, доступны любому в браузере. Я просто автоматизирую то, что можно сделать руками". Технически я не взламываю ничего, не обхожу авторизацию, не нарушаю robots.txt.
Просто читаю HTML быстрее человека.
Эта история про то, что большие данные — не всегда big data. Иногда достаточно 15KB JSON и простого скрипта, чтобы создать полезный сервис для тысяч людей.
Знакомая делает сервис профориентации для школьников. Нужна база всех колледжей Казахстана: названия, города, специальности. Официальной открытой базы нет. Есть разрозненные сайты, PDF-файлы, устаревшие списки.
Нашёл сайт с каталогом колледжей. Там всё: регионы, города, специальности, контакты. Но нет API, нет экспорта. Только HTML с таблицами. Решил парсить.
Написал Puppeteer-скрипер: заходит на сайт, выбирает регион, открывает список городов, в каждом городе ищет колледжи, сохраняет данные в JSON. Первая версия работала 2 часа, парсила 500 колледжей. Медленно, но работало.
Оптимизировал: вместо последовательного прохода по ссылкам, сделал параллельный. Открыл 10 браузерных вкладок одновременно, каждая парсит свой регион. Время упало до 20 минут. Нагрузка на процессор выросла, но результат того стоил.
Проблемы были смешные:
- Некоторые страницы грузились бесконечно — добавил таймаут 30 секунд
- Некоторые колледжи имели название на казахском и русском — парсил оба
- Некоторые специальности были дубликатами с разным написанием — дедупликация через Set
Результат: три JSON файла:
- regions.json — список регионов Казахстана
- cities.json — города с привязкой к регионам
- colleges.json — 15161 запись о колледжах со специальностями
Размер colleges.json — 15KB. В нём вся образовательная система страны. Для сравнения: обычная фотография с телефона весит 2-3MB. База данных всех колледжей — 15KB.
Знакомая взяла эти файлы, загрузила в свою базу данных, сделала на их основе поисковик. Школьник вводит "хочу учиться на программиста в Алматы" → система фильтрует JSON → показывает 20 подходящих колледжей. Без сервера, без SQL,
просто фильтрация массива в JavaScript.
Обновление данных — отдельная история. Колледжи не меняются часто, но раз в год нужно обновлять. Запускаю скрипт заново, он парсит свежие данные, сравниваю с прошлогодним файлом через diff. Удалились 5 колледжей, добавились 12
новых, изменились названия у 8. Обновляю JSON за 5 минут.
Сейчас этот скрипт лежит в папке scrapers/college-scraper.js, 9KB кода. Запускаю раз в год. Он молча делает работу, которая вручную заняла бы недели: открытие сотен страниц, копирование данных, структурирование в таблицы.
Знакомая спросила: "Это легально?". Я ответил: "Данные публичные, доступны любому в браузере. Я просто автоматизирую то, что можно сделать руками". Технически я не взламываю ничего, не обхожу авторизацию, не нарушаю robots.txt.
Просто читаю HTML быстрее человека.
Эта история про то, что большие данные — не всегда big data. Иногда достаточно 15KB JSON и простого скрипта, чтобы создать полезный сервис для тысяч людей.