Привет всем! Интернет вообще — странная штука. Иногда переходя по ссылкам заносит в тааааакие дебри, куда бы ты по собственно воле и не полез. Так и в этот раз — бурные течения Интернет-трафика занесли меня на страницу Министерства транспорта и дорожной инфраструктуры Московской области, на которой имеется проверка разрешения на работу такси. Стало интересно — можно ли спарсить всю базу такси целиком? Так и родилась первая запись из двух, которая звучит как «Python в московском такси».
Сразу скажу, что спарсить при должном опыте и терпении можно совершенно все 🙂 Вопрос только — сколько времени и нервов все это займет. Так и в этот раз — все достаточно просто, но требуемые навыки для разработки регулярных выражений у меня отсутствуют (я в принципе достаточно слаб в регулярных выражениях — это моя слабость, я о ней знаю, но вот взять, и покорить эту высоту пока не получается. Впрочем — мой оптимизм при мне 🙂 ).
Итак, поисковая форма на сайте достаточна проста:
Как видим — у нас имеются поля:
- Государственный регистрационный знак
- Полное наименование перевозчика
- Регистрационный номер разрешения
- Регион выдачи разрешения
Самое интересное, что клик по кнопке «Найти» выдает нам первую страницу из полного списка выданных за все время Министерством транспорта и дорожной инфраструктуры Московской области разрешений на работу такси. Вообще всех — как активных, так и аннулированных.
Теперь давайте посмотрим на ссылку, которая нам выдается. Первая страница со списком доступна по адресу: http://mtdi.mosreg.ru/deyatelnost/celevye-programmy/taksi1/proverka-razresheniya-na-rabotu-taksi?number=&name=&id=®ion=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.