Сервис данных по выборам и кандидатам

    Добрый день, коллеги!

    Как многие знают, 14 сентября 2014 года пройдет единый день голосования, во многих регионах России выбирают себе депутатов и иногда мэров.
    При этом информационное обеспечение, на мой взгляд, хромает. Главное неудобство заключается в том, что информацию о кандидатах невозможно посмотреть списком, только список без подробностей (к тому же разбитый на страницы по 20 человек) и по одному человеку с подробностями.

    Солнечным летним днем пришла мне идея вытащить эту информацию, чтобы можно было её удобно анализировать и выбирать кандидатов наглядно и с умом. К сожалению, ЦИК не предоставляет каких либо экспортных вариантов по всем выборам (я по крайней мере не нашел), поэтому решение — парсинг страничек роботом.


    Первое решение было на Скале, мне хотелось закрепить знание в языке и разобраться с новым для меня фреймворком Play. Парсер написал, протестировал, но, к сожалению, документацию к Play не осилил, долго не мог найти ответ на какой-то начальный вопрос. После этого решил разобраться с фреймворком Django, благо с документацией всё обстояло гораздо лучше, соответственно парсер был переписан под Python.

    Проект можно посмотреть на Github, от парсера на Скале осталась папка «scala-parser».

    В процессе разработки, при составлении моделей, выяснился замечательный бонус, мы можем получить всю историю участия кандидата в выборах ( с 2007 года, когда ЦИК перешел на текущий формат, старый я не парсил, тем более это дало бы максимум +1 выборы к истории, сам ресурс стартовал в 2003 году). Это, на самом деле, можно считать основной ценностью проекта, так как теперь избиратель может получить полноту информации, где, когда и с кем участвовал в выборах тот или иной кандидат. В списке выборов выведена колонка, сколько раз кандидат участвовал в выборах и можно перейти на страницу кандидата, посмотреть все его выборы и всю информацию. Насколько мне известно, пара ФИО + дата рождения уникальна для граждан России, так что ошибок не будет.

    Модели представляет из себя очевидные конструкции, объекты выборов (наименование, дата проведения и линк), объекты людей (имя и дата рождения) и объекты информации со всеми данными на выборах со ссылками на конкретные выборы и конкретного человека.

    Парсинг сайта на питоне с помощью библиотеки BeautifulSoup можно посмотреть тут. Во время разработки пришлось решать проблему с комиссиями, которые иногда путаются с датами кандидатов и их ФИО при занесении в базу, я проверяю дату обновления всех записей информации по окончанию обработки выборов. Если дата обновления информации по кандидату сильно меньше даты обновления выборов — эта информация лишняя, её можно удалить.

    А дальше идет уже самый обычный Django проект, который особого интереса не представляет

    Для динамических фильтров и сортировок в таблице используется js-библиотека http://tablefilter.free.fr/

    Первоначально проект был размещен на Heroku, но я довольно быстро превысил бесплатный лимит на базу данных ( не более 10000 строк), сейчас, после парсинга выборов Московской области, Москвы и Питера количество кандидатов около 50 тысяч. Клич в фейсбуке о спонсировании проекта дал мне бесплатный виртуальный сервер от Сергея Арсентьева, за что ему большое спасибо!

    Это был для меня первый опыт настройки linux-сервера по ssh под Django-проект через Gunicorn с Nginx, так что рост знаний просто удивительный получился. Остался один вопрос, логи почему-то не пишутся при запуске через Upstart, если кто в теме — помогите . Конфиги Upstart и Nginx можно тоже найти на гитхабе.

    Собственно, сама ссылка на работающий сайт
    elections.istra-da.ru

    К примеру информацию по выборам в Московскую городскую думу можно найти тут:
    elections.istra-da.ru/election/1399

    Если есть потребность — называйте свои регионы и районы, я их тоже включу в задания для робота. Все регионы не стал пока сканировать, только Московская область, Москва и Питер, опасаюсь, как бы ЦИК не обиделся и не заблокировал парсер.

    Замечания, советы, предложения, идеи дальнейшего развития, помощь в разработке приветствуются
    Метки:
    • +10
    • 2,3k
    • 5
    Поделиться публикацией
    Комментарии 5
    • 0
      Странно. Не нашел, например, вот такого кандидата в МГД xn--2014-43dl9cps4a.xn--p1ai/candidates/sharov.vyacheslav/ (Шаров Вячеслав).
      Я что-то делаю не так или ошибка в базе?
      Или вот такого веселого перца тоже не нашел xn--2014-43dl9cps4a.xn--p1ai/candidates/pinson.sergey/ (Пинсон Сергей)
      • +1
        Значит он не кандидат, не подавал заявления на регистрацию, не заносился комиссиями Москвы в базу.

        «Моя Москва» — это гражданский проект, к официальной регистрации отношения не имеет.
        • 0
          Вот так поворот. Спасибо, буду знать.
        • –2
          Мда, ошибка на ошибке:
          К этому времени я работал в управление делами Президента Российской Федерации на новом арбате, занимался жилищными вопросами.
        • 0
          Надо кастовать Ивана Бегтина (ibegtin) в пост. Тогда данные можно было бы положить на гитхаб, а сайт спасти от хабраекта.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.