Парсинг с помощью Python. Урок 5

Скрейпим сайты с помощью библиотек Selenium и BeautifulSoup

Дата
30 дек. 2021
Парсинг с помощью Python. Урок 5

Продолжаем рассказывать, как скрейпить сайты с помощью Python. Поэтому сегодня мы поговорим о том, как использовать библиотеки, которые мы уже с вами изучали в предыдущих уроках — Selenium и BeautifulSoup, и разберем один интересный случай, когда кажется, что все просто, но на самом деле нужно знать некоторые хитрости.  

Съемка и монтаж: Глеб Лиманский

Сегодня мы будет скрейпить сайт Мосгорсуда. В своей работе я очень часто прибегаю к данным этого сайта. В качестве примера мы возьмем карточку по моему административному делу: я выходила с пикетом против закона об иностранных агентах к Минюсту, потому что лично я признана иностранным агентом и сайт «Важных историй». Мы категорически не согласны с этим статусом и оспариваем его в суде. Так как меня за пикет задержали и составили протокол об административном правонарушении, то вот и появилась карточка на сайте Мосгорсуда. 

Мы хотим собрать данные из этой таблички.

А также получить данные об опубликованных документах по этому делу. 

Для начала мы должны импортировать нужные библиотеки. 

Как и в прошлом уроке мы с вами сначала запускаем драйвер, после чего мы копируем ссылку на дело в переменную url и передаем ее драйверу. После этого откроется браузер Chrome и ссылка на сайт. 

Теперь давайте разберемся как достать данные из первой странички. Поэтому давайте в обычном браузере, где мы работаем кликнем правой кнопкой мыши на табличку и выбираем Inspect. Если у вас другой браузер, то вам нужно кликнуть на «Посмотреть код элемента» или «Изучить элемент». После чего мы попадаем в Inspector. 

И мы видим, что вся наша табличка лежит в теге с классом «cardsud_wrapper». Копируем название класса и в коде пишем следующее:  

Нравятся наши уроки?
Поддержите нас небольшим пожертвованием, а мы продолжим рассказывать о самых интересных иструментах для дата-журналистов

В ответе лежит наша табличка, но не в очень удобном виде. Давайте посмотрим код еще раз. В каждой строчке есть по два элемента с классами «left» и «right». Давайте соберем данные отдельно из элементов из первого и второго класса. Так у нас получатся два списка: в одном будут лежать название данных, а во вторых сами данные. 

Теперь нам осталось только объединить эти два списка в словарь. Для этого используем функцию zip и dict. 

Давайте создадим словарь case, куда будем сохранять вообще все данные. И словарь case_info, куда положим только что собранную табличку. 

Первая задача решена. Для второй нам необходимо кликнуть на «Судебные акты» и собрать оттуда данные о документах. Давайте воспользуемся методом find_element_by_link_text. И сразу кликнем на элемент.

И как видите мы получили ошибку, потому что браузер не может почему-то кликнуть на эту кнопку, хотя она там есть. Поэтому давайте немного перепишем код и используем Keys. 

Теперь кнопка нажимается и мы видим нужную нам табличку с документами. Давайте извлечем оттуда данные с помощью библиотеки BeautifulSoup. Для начала снова посмотрим, как устроен код этой таблицы в Inspector.

Мы видим что наша табличка лежит в теге с классом «custom_table mainTable». А чтобы добраться до каждой строчки нужно спуститься в тег tbody и найти в нем все теги tr. 

После этого, можно уже доставать все данные попорядку и записывать их в словарь document, а каждый такой словарь сохранять сразу в нашу переменную case. 

Вот таким способом можно получать данные с сайта Мосгорсуда. Остались вопросы? Задавайте их в нашем Telegram-чате, постараемся ответить.