Парсинг с помощью Python. Урок 5
Скрейпим сайты с помощью библиотек Selenium и BeautifulSoup
Продолжаем рассказывать, как скрейпить сайты с помощью 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-чате, постараемся ответить.