Эта история следует за серией Web Scraping. Если вы пропустили последнюю историю, вы можете найти ее здесь:



С этой серией также связан репозиторий GitHub, если вы хотите найти примеры кода: Web Scraping Series

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

Контент, который вы можете получить от этих действий, называется динамическим контентом, и обычно это контент, сгенерированный сценариями JavaScript или PHP.

Селен

Selenium — это набор из нескольких инструментов, используемых для проектов веб-автоматизации. Он имеет реализацию Python. Давайте установим его сейчас:

pip install selenium

Поскольку Selenium имитирует действия пользователя, он работает напрямую через браузер. Итак, вам нужно загрузить веб-драйвер, который вы можете использовать в своем браузере. Например, если вы используете Chrome, вы можете скачать его здесь: https://chromedriver.chromium.org/downloads (выберите версию, соответствующую вашей версии Chrome).

Если вы не используете Chrome, просто загрузите веб-драйвер, соответствующий вашему веб-браузеру.

Запуск драйвера

Теперь вы можете открыть проект Python, и мы начнем настраивать драйвер. Начнем с импорта веб-драйвера и его настройки:

Поскольку я использую Brave, мне нужно указать его местоположение. Если вы используете Chrome, Firefox или любой другой распространенный веб-браузер, вам не нужно этого делать. Кроме того, поскольку мой веб-драйвер находится на том же пути, что и мой скрипт, мне особо не нужно указывать его местоположение. Итак, с Chrome я мог бы просто сделать это:

Теперь я могу запустить драйвер с URL-адресом, используя driver.get(url) .

Найти элементы

Selenium предоставляет два метода поиска элементов: либо webdriver.find_element для одного элемента, либо webdriver.find_elements для списка всех элементов.

Два параметра, которые мы можем использовать с этими методами, это by и value:

  • by указывает метод, используемый для поиска элемента. Это может быть By.ID, By.CLASS_NAME, By.XPATH, By.CSS_SELECTOR и т. д.
  • value указывает значение, используемое by .

Например:

Я не буду объяснять синтаксис XPath или CSS, вы можете найти синтаксис XPath здесь и синтаксис CSS здесь.

Взаимодействие со стихиями

У нас есть несколько способов взаимодействия с элементами. Возможно, мы хотим получить их содержимое, их атрибуты или выполнить с ними действия.

Чтобы получить их содержимое, как показано выше, вы можете использовать element.text. Чтобы получить атрибуты, вы используете вместо этого element.get_attribute(attribute) .

Затем вы также можете выполнять такие действия, как нажатие кнопки или ссылки, отправка ключей в панель поиска и т. д.

Ожидающий

Иногда вам нужно будет подождать, прежде чем очищать содержимое или выполнять действия. Например, если вы нажмете кнопку, возможно, вам придется подождать 3 секунды, прежде чем что-либо произойдет.

У вас есть два основных способа ожидания с использованием Selenium:

  • Вы можете подождать определенное время.
  • Вы можете подождать, пока элемент появится на странице.

Селен с BeautifulSoup

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

Затем вам просто нужно инициализировать суп и сделать это, как мы делали в предыдущей истории:

Заключительное примечание

Теперь вы знаете, что можно делать с помощью Selenium. Есть еще другие вещи, но они немного сложны и не очень полезны, поэтому я не буду о них говорить.

Чтобы найти другие истории из этой серии, проверьте это: Скрапинг веб-страниц с помощью Python.

Чтобы узнать больше о моих историях о Python, нажмите здесь! Вы также можете получить доступ ко всему моему контенту, проверив эту страницу.

Если вам понравилась история, не забудьте похлопать, прокомментировать и, возможно, подписаться на меня, если вы хотите узнать больше о моем содержании :)

Вы также можете подписаться на меня по электронной почте, чтобы получать уведомления каждый раз, когда я публикую новую историю, просто нажмите здесь!

Если вы еще не подписаны на Medium и хотите поддержать меня или получить доступ ко всем моим историям, вы можете использовать мою ссылку: