Python в московском такси

Привет всем! Интернет вообще — странная штука. Иногда переходя по ссылкам заносит в тааааакие дебри, куда бы ты по собственно воле и не полез. Так и в этот раз — бурные течения Интернет-трафика занесли меня на страницу Министерства транспорта и дорожной инфраструктуры Московской области, на которой имеется проверка разрешения на работу такси. Стало интересно — можно ли спарсить всю базу такси целиком? Так и родилась первая запись из двух, которая звучит как «Python в московском такси».

Сразу скажу, что спарсить при должном опыте и терпении можно совершенно все 🙂 Вопрос только — сколько времени и нервов все это займет. Так и в этот раз — все достаточно просто, но требуемые навыки для разработки регулярных выражений у меня отсутствуют (я в принципе достаточно слаб в регулярных выражениях — это моя слабость, я о ней знаю, но вот взять, и покорить эту высоту пока не получается. Впрочем — мой оптимизм при мне 🙂 ).

Итак, поисковая форма на сайте достаточна проста:
Проверка разрешения на работу такси

Как видим — у нас имеются поля:

  • Государственный регистрационный знак
  • Полное наименование перевозчика
  • Регистрационный номер разрешения
  • Регион выдачи разрешения

Самое интересное, что клик по кнопке «Найти» выдает нам первую страницу из полного списка выданных за все время Министерством транспорта и дорожной инфраструктуры Московской области разрешений на работу такси. Вообще всех — как активных, так и аннулированных.

Теперь давайте посмотрим на ссылку, которая нам выдается. Первая страница со списком доступна по адресу: http://mtdi.mosreg.ru/deyatelnost/celevye-programmy/taksi1/proverka-razresheniya-na-rabotu-taksi?number=&name=&id=&region=ALL — что выглядит вообще скучно, но … что будет, если мы перейдем на вторую страницу? Переходим, смотрим ссылку в адресной строке, и начинаем радоваться, ибо выглядит она вот так: http://mtdi.mosreg.ru/deyatelnost/celevye-programmy/taksi1/proverka-razresheniya-na-rabotu-taksi?region=ALL&page=2 — что уже выглядит значительно интереснее. А если учесть, что кликнув на третью страницу мы увидим ссылку http://mtdi.mosreg.ru/deyatelnost/celevye-programmy/taksi1/proverka-razresheniya-na-rabotu-taksi?region=ALL&page=3 а уж напоследок (для очистки совести) — снова на первую страницу, что бы полюбоваться ссылкой http://mtdi.mosreg.ru/deyatelnost/celevye-programmy/taksi1/proverka-razresheniya-na-rabotu-taksi?region=ALL&page=1 … После подобных экспериментов можно гарантировать — все страницы с выдаваемой информацией будут отличаться только номером в конце. А значит — для парсинга информации мы можем обойтись банальным циклом (это радует).

Сразу определим, до какого момента будет работать наш цикл. Для этого наугад откроем ссылку с числом, которое по вашему мнению будет максимальным для количества выданных лицензий. Я тут тыкал-тыкал, и оказалось, что при попытке открыть ссылку http://mtdi.mosreg.ru/deyatelnost/celevye-programmy/taksi1/proverka-razresheniya-na-rabotu-taksi?region=ALL&page=70000 — эта страница отличается от других тем, что на ней нет данных о лицензиях. От этого и будем отталкиваться: цикл работает до тех пор, пока на странице есть номера лицензий (как фиксировать этот факт — разберемся позднее).

Теперь разберем — что именно нам нужно делать в цикле? А делать мы будем следующее:

  • Открывать страницы поочередно
  • Сгребать нужную информацию
  • Сохранять в Excel-файл (об это я писал ранее)
  • Переходить на следующую страницу

Пока все 🙂 Спасибо за внимание! В случае возникновения вопросов — пишите на почту или в Telegram.