перейти к содержанию

Парсинг веб-страниц с помощью Selenium и Python: полное руководство на 2024 год

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

Обзор веб-скрапинга

Прежде чем погрузиться в Selenium, давайте сначала разберемся, что такое парсинг веб-страниц и почему он используется.

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

Наиболее распространенные случаи использования парсинга веб-страниц включают в себя:

  • Мониторинг цен – Отслеживайте цены на товары на сайтах электронной коммерции. Помогите обнаружить изменения и ценовые ошибки.

  • Исследование рынка – Собирайте данные о конкурентах, продуктах, обзорах и т. д. со всего Интернета.

  • Мониторинг новостей – Собирать статьи и новости с медиа-сайтов. Полезно для журналистов и специалистов по связям с общественностью.

  • В исследовании – Социологи используют парсинг веб-страниц для сбора данных из социальных сетей для научных исследований.

  • Создание базы данных – Создавайте структурированные наборы данных с контактами компаний, спецификациями продуктов и т. д. путем очистки веб-сайтов.

Парсинг веб-страниц может сэкономить огромное количество времени и усилий по сравнению со сбором данных вручную. Однако соблюдайте этические нормы и соблюдайте правила robots.txt веб-сайта.

Зачем использовать Selenium для парсинга веб-страниц?

Существует множество инструментов для парсинга веб-страниц, таких как BeautifulSoup, Scrapy, Puppeteer и т. д. Однако Selenium выделяется, когда вам нужно:

  • Собирайте данные со сложных динамических веб-сайтов, которые загружают контент с помощью JavaScript.

  • Взаимодействуйте с веб-сайтами, нажимая кнопки, заполняя формы и т. д. перед парсингом.

  • Очистите данные, скрытые за формами входа или платежными шлюзами.

  • Масштабируйте парсинг для обработки больших веб-сайтов с тысячами страниц.

Selenium автоматизирует реальный веб-браузер, такой как Chrome или Firefox, вместо того, чтобы просто получать и анализировать HTML, как большинство других веб-парсеров. Это позволяет парсить динамические данные.

Кроме того, за Selenium стоит большое сообщество, и он поддерживает несколько языков, включая Python, Java, C# и JavaScript.

Архитектура парсинга веб-страниц Selenium

Прежде чем мы перейдем к коду, давайте поймем, как Selenium выполняет парсинг веб-страниц:

Selenium-архитектура для парсинга веб-страниц

  • Selenium взаимодействует с браузером с помощью API веб-драйвера.

  • WebDriver запускает и управляет браузером, например Chrome.

  • Он выполняет очистку кода и скриптов, написанных на Python, Java и т. д.

  • Веб-страницы отображаются и обрабатываются браузером.

  • Собранные данные собираются и структурируются в соответствии с логикой скрипта.

  • Вы можете развернуть парсер на своих машинах или использовать облачную платформу.

Эта архитектура позволяет Selenium парсить даже сложные сайты с большим количеством JavaScript, с которыми не могут справиться такие инструменты, как Requests.

Настройка Selenium с помощью Python

Прежде чем мы сможем начать парсинг веб-страниц, нам необходимо настроить Selenium в среде Python.

Установить Python

Убедитесь, что в вашей системе установлен Python 3.6 или выше. Вы можете скачать последнюю версию Python с сайта python.org.

Установить Selenium

После установки Python выполните следующую команду для установки Selenium:

pip install selenium

Это установит пакет Python Selenium из PyPI.

Установите веб-драйверы

Selenium WebDriver позволяет контролировать браузеры для парсинга. Вам необходимо установить WebDriver для браузера, который вы хотите использовать:

Chrome: Скачать ChromeDriver который соответствует вашей версии Chrome.

Firefox: Получить ГеккоДрайвер в зависимости от вашей версии Firefox.

Edge: Установите MicrosoftWebDriver.

Убедитесь, что исполняемый файл WebDriver находится в PATH вашей системы, чтобы Selenium мог его обнаружить.

Вот и все! Теперь мы готовы начать парсинг веб-страниц с помощью Selenium Python.

Запуск браузера

Первый шаг — запустить браузер через Selenium.

Импортируйте Selenium и создайте WebDriver экземпляр, передав путь к исполняемому файлу драйвера браузера:

from selenium import webdriver

driver = webdriver.Chrome(‘/path/to/chromedriver‘) 

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

from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

Затем используйте get() метод, позволяющий экземпляру браузера перейти по URL-адресу:

driver.get(‘https://www.example.com‘)

Браузер теперь откроет страницу, отобразит JavaScript, загрузит динамический контент и т. д. Теперь мы можем начать очистку!

Расположение элементов страницы

Чтобы извлечь данные со страниц, нам сначала нужно найти соответствующие элементы HTML. Селен обеспечивает find_element() метод для этого:

search_box = driver.find_element(By.NAME, ‘q‘)

Это позволит найти элемент с атрибутом name="q". Некоторые другие распространенные стратегии поиска:

  • By.ID – Найти по идентификатору элемента
  • By.XPATH – Найти с помощью запроса XPath
  • By.CSS_SELECTOR – Найти с помощью селектора CSS
  • By.CLASS_NAME – Найти по имени класса CSS
  • By.TAG_NAME – Поиск по имени HTML-тега

Вы также можете найти несколько элементов, используя find_elements() который возвращает список.

Извлечение текста

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

heading = driver.find_element(By.TAG_NAME, ‘h1‘)
print(heading.text)

Это напечатает <h1> текст заголовка на странице.

Аналогично вы можете получить значения полей ввода:

username = driver.find_element(By.ID, ‘username‘)
print(username.get_attribute(‘value‘))

Чтобы нажать на ссылки и кнопки на странице, используйте click() метод для элемента:

link = driver.find_element(By.LINK_TEXT, ‘Next Page‘)
link.click() 

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

Заполнение форм

Вы можете вводить текст в текстовые поля и другие элементы ввода, используя send_keys():

search_box.send_keys(‘Web Scraping‘)

Это позволяет входить на сайты, отправлять формы и т. д. перед очисткой.

Выполнение JavaScript

Selenium также позволяет выполнять JavaScript непосредственно на страницах, используя execute_script():

driver.execute_script(‘alert("Hello World");‘)

Вы можете использовать это для очистки данных, введенных JavaScript в DOM.

Ожидание загрузки элементов

Современные сайты используют тяжелые AJAX и JavaScript для динамической загрузки контента. Иногда вам может потребоваться дождаться загрузки определенных элементов или данных перед очисткой.

Селен имеет WebDriverWait и expected_conditions чтобы справиться с этим:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, ‘someid‘)))

Теперь скрипт будет ждать до 10 секунд, пока элемент станет доступным для клика.

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

Прокрутка страниц

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

# Scroll down the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

# Scroll back to top
driver.execute_script("window.scrollTo(0, 0);")   

Это позволяет парсить длинные веб-страницы. Тот же подход к прокрутке работает для очистки сообщений в Facebook, Twitter и других социальных сетях.

Обработка входа в систему и платного доступа

Некоторые сайты требуют входа в систему перед очисткой или могут иметь платный доступ, ограничивающий доступ.

Вы можете использовать Selenium для ввода учетных данных, обхода платного доступа и доступа к ограниченной информации для очистки:

username = driver.find_element(By.ID, ‘username‘)
password = driver.find_element(By.ID, ‘password‘)

username.send_keys(‘myusername1234‘) 
password.send_keys(‘mypassword5678‘)

login_button = driver.find_element(By.XPATH, ‘//button[text()="Log in"]‘)
login_button.click()

Это позволяет заходить на такие сайты, как Amazon, eBay и т. д., для очистки закрытого контента.

Пример веб-скрапинга Selenium

Давайте соберем все вместе в скрипт веб-скрапера Selenium:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# Click cookie consent banner
cookie_btn = driver.find_element(By.ID, ‘cookiebanner-accept‘) 
cookie_btn.click()

# Wait for results to load
results = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "results"))
)

# Extract data from results 
headings = results.find_elements(By.TAG_NAME, ‘h3‘)
for heading in headings:
   print(heading.text)

driver.quit()

Этот сценарий:

  • Запускает Chrome и переходит на сайт example.com.
  • Нажимает на баннер согласия на использование файлов cookie, чтобы включить очистку.
  • Ожидает загрузки результатов
  • Извлекает тексты заголовков и печатает их.

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

Советы по эффективному парсингу веб-страниц с помощью Selenium

Вот несколько советов по повышению производительности парсинга веб-страниц с помощью Selenium:

  • Используйте безголовый браузер для более быстрого парсинга без необходимости рендеринга и отображения пользовательского интерфейса.

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

  • Подождите загрузки страницы и AJAX. запросы на выполнение перед извлечением данных

  • Прокручивать постепенно при очистке длинных страниц, чтобы не загружать все сразу

  • Используйте селекторы CSS для удобства чтения и производительности при расположении элементов

  • Повторить попытку при ошибке вместо полной остановки, чтобы сделать скребки более надежными

  • Запросы дроссельной заслонки чтобы избежать перегрузки серверов и блокировки

  • Бегайте в облаке использование таких сервисов, как Selenium Grid, для надежности и масштабирования.

Альтернативы селену для парсинга веб-страниц

Вот некоторые другие популярные инструменты для парсинга веб-страниц, на которые вы можете обратить внимание:

  • Красивый суп – Ведущая библиотека Python для очистки HTML и XML

  • Scrapy – Быстрая платформа веб-сканирования для крупных проектов парсинга.

  • кукольник – Библиотека очистки Chrome без головы для разработчиков JavaScript.

  • Драматург – Парсинг с использованием браузеров Chromium, Firefox и WebKit.

  • апифай – Масштабируемая платформа для парсинга веб-страниц со встроенными прокси и безголовым Chrome.

Каждый инструмент имеет свои сильные и слабые стороны. Оцените их в соответствии с вашим конкретным вариантом использования при выборе решения для парсинга веб-страниц.

Заключение

Selenium — универсальный инструмент для создания надежных парсеров веб-страниц на Python и других языках. Это открывает такие возможности, как очистка сайтов JavaScript, обработка динамического контента, доступ к закрытым данным и т. д., которые в противном случае затруднительны.

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

Благодаря возможностям Selenium, Python и надежным стратегиям парсинга вы можете извлекать огромные объемы полезных данных из Интернета для приложений бизнес-аналитики, исследований и обработки данных.

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *