Парсинг с помощью Python. Урок 5
Скрейпим сайты с помощью библиотек Selenium и BeautifulSoup
![Парсинг с помощью Python. Урок 5](https://storage.googleapis.com/static.istories.media/uploaded/images/f1d58c9727254e9da907ebbdc3f11923-1920x960px_1x.jpg)
Продолжаем рассказывать, как скрейпить сайты с помощью Python. Поэтому сегодня мы поговорим о том, как использовать библиотеки, которые мы уже с вами изучали в предыдущих уроках — Selenium и BeautifulSoup, и разберем один интересный случай, когда кажется, что все просто, но на самом деле нужно знать некоторые хитрости.
Сегодня мы будет скрейпить сайт Мосгорсуда. В своей работе я очень часто прибегаю к данным этого сайта. В качестве примера мы возьмем карточку по моему административному делу: я выходила с пикетом против закона об иностранных агентах к Минюсту, потому что лично я признана иностранным агентом и сайт «Важных историй». Мы категорически не согласны с этим статусом и оспариваем его в суде. Так как меня за пикет задержали и составили протокол об административном правонарушении, то вот и появилась карточка на сайте Мосгорсуда.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/a047e20563674c24a5e4d2ae4176d66e-1200xautopx_1x.png)
Мы хотим собрать данные из этой таблички.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/87527ffdd1db4f6e875684fc1db56645-1200xautopx_1x.png)
А также получить данные об опубликованных документах по этому делу.
Для начала мы должны импортировать нужные библиотеки.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/1bc517d620bf47f89343999b09545878-1200xautopx_1x.png)
Как и в прошлом уроке мы с вами сначала запускаем драйвер, после чего мы копируем ссылку на дело в переменную url и передаем ее драйверу. После этого откроется браузер Chrome и ссылка на сайт.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/90173337b0a94a34bf4e2db07794173b-1200xautopx_1x.png)
Теперь давайте разберемся как достать данные из первой странички. Поэтому давайте в обычном браузере, где мы работаем кликнем правой кнопкой мыши на табличку и выбираем Inspect. Если у вас другой браузер, то вам нужно кликнуть на «Посмотреть код элемента» или «Изучить элемент». После чего мы попадаем в Inspector.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/25774434702a44c0b6ec62aa98db86d4-1200xautopx_1x.png)
![](https://storage.googleapis.com/static.istories.media/uploaded/images/3ed0fdf69db547f99102cb1011762453-1200xautopx_1x.png)
И мы видим, что вся наша табличка лежит в теге с классом «cardsud_wrapper». Копируем название класса и в коде пишем следующее:
![](https://storage.googleapis.com/static.istories.media/uploaded/images/0f4635d771154cf7bd6ef0c7f3cf7421-1200xautopx_1x.png)
В ответе лежит наша табличка, но не в очень удобном виде. Давайте посмотрим код еще раз. В каждой строчке есть по два элемента с классами «left» и «right». Давайте соберем данные отдельно из элементов из первого и второго класса. Так у нас получатся два списка: в одном будут лежать название данных, а во вторых сами данные.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/9f5b246c9ad64a47968bcfd546ff1a73-1200xautopx_1x.png)
Теперь нам осталось только объединить эти два списка в словарь. Для этого используем функцию zip и dict.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/1f2f32bf926243c8bf011b2c3e2adf2d-1200xautopx_1x.png)
Давайте создадим словарь case, куда будем сохранять вообще все данные. И словарь case_info, куда положим только что собранную табличку.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/3ad9ceb015d7422f9c2126d6963ac53e-1200xautopx_1x.png)
Первая задача решена. Для второй нам необходимо кликнуть на «Судебные акты» и собрать оттуда данные о документах. Давайте воспользуемся методом find_element_by_link_text. И сразу кликнем на элемент.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/fb4a58a130574b41b81b9f32198ae472-1200xautopx_1x.png)
И как видите мы получили ошибку, потому что браузер не может почему-то кликнуть на эту кнопку, хотя она там есть. Поэтому давайте немного перепишем код и используем Keys.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/b6c83118a62343b9b1dce2be075d5d41-1200xautopx_1x.png)
Теперь кнопка нажимается и мы видим нужную нам табличку с документами. Давайте извлечем оттуда данные с помощью библиотеки BeautifulSoup. Для начала снова посмотрим, как устроен код этой таблицы в Inspector.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/8af8b3de17f14cde83fedd1916e72eac-1200xautopx_1x.png)
Мы видим что наша табличка лежит в теге с классом «custom_table mainTable». А чтобы добраться до каждой строчки нужно спуститься в тег tbody и найти в нем все теги tr.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/ba84c737f92a4b2cae32e3dfef0be913-1200xautopx_1x.png)
После этого, можно уже доставать все данные попорядку и записывать их в словарь document, а каждый такой словарь сохранять сразу в нашу переменную case.
![](https://storage.googleapis.com/static.istories.media/uploaded/images/d683051b3dd341fea07bd7995516dfc1-1200xautopx_1x.png)
Вот таким способом можно получать данные с сайта Мосгорсуда. Остались вопросы? Задавайте их в нашем Telegram-чате, постараемся ответить.