Веб-скрапинг — это процесс автоматического извлечения данных с веб-сайтов с помощью программных инструментов и скриптов. Selenium — один из самых популярных инструментов, используемых для парсинга веб-страниц, благодаря его мощным возможностям веб-автоматизации. В этом подробном руководстве мы рассмотрим парсинг веб-страниц с помощью Selenium и Python.
Обзор веб-скрапинга
Прежде чем погрузиться в Selenium, давайте сначала разберемся, что такое парсинг веб-страниц и почему он используется.
Веб-скрапинг — это методы автоматического сбора данных с веб-сайтов с помощью скриптов и ботов, а не копирования вручную. Собранные данные затем структурируются и сохраняются в базе данных или электронной таблице для дальнейшего анализа.
Наиболее распространенные случаи использования парсинга веб-страниц включают в себя:
Мониторинг цен – Отслеживайте цены на товары на сайтах электронной коммерции. Помогите обнаружить изменения и ценовые ошибки.
Исследование рынка – Собирайте данные о конкурентах, продуктах, обзорах и т. д. со всего Интернета.
Мониторинг новостей – Собирать статьи и новости с медиа-сайтов. Полезно для журналистов и специалистов по связям с общественностью.
В исследовании – Социологи используют парсинг веб-страниц для сбора данных из социальных сетей для научных исследований.
Создание базы данных – Создавайте структурированные наборы данных с контактами компаний, спецификациями продуктов и т. д. путем очистки веб-сайтов.
Парсинг веб-страниц может сэкономить огромное количество времени и усилий по сравнению со сбором данных вручную. Однако соблюдайте этические нормы и соблюдайте правила robots.txt веб-сайта.
Зачем использовать Selenium для парсинга веб-страниц?
Существует множество инструментов для парсинга веб-страниц, таких как BeautifulSoup, Scrapy, Puppeteer и т. д. Однако Selenium выделяется, когда вам нужно:
Собирайте данные со сложных динамических веб-сайтов, которые загружают контент с помощью JavaScript.
Взаимодействуйте с веб-сайтами, нажимая кнопки, заполняя формы и т. д. перед парсингом.
Очистите данные, скрытые за формами входа или платежными шлюзами.
Масштабируйте парсинг для обработки больших веб-сайтов с тысячами страниц.
Selenium автоматизирует реальный веб-браузер, такой как Chrome или Firefox, вместо того, чтобы просто получать и анализировать HTML, как большинство других веб-парсеров. Это позволяет парсить динамические данные.
Кроме того, за Selenium стоит большое сообщество, и он поддерживает несколько языков, включая Python, Java, C# и JavaScript.
Архитектура парсинга веб-страниц 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
– Найти с помощью запроса XPathBy.CSS_SELECTOR
– Найти с помощью селектора CSSBy.CLASS_NAME
– Найти по имени класса CSSBy.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 и надежным стратегиям парсинга вы можете извлекать огромные объемы полезных данных из Интернета для приложений бизнес-аналитики, исследований и обработки данных.