CAPSOLVER
Блог
Веб-скрапинг с Selenium и Python | Решение CAPTCHA при веб-скрапинге

Веб-скрапинг с Selenium и Python | Решение CAPTCHA при веб-скрапинге

Logo of Capsolver

Nikolai Smirnov

Software Development Lead

19-Jun-2024

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

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

Содержание

  1. Что такое веб-скрапинг?
    • Процесс веб-скрапинга обычно включает следующие шаги:
  2. Начало работы с Selenium
    • Подготовка
    • Импорт библиотек
    • Доступ к странице
    • Параметры запуска
    • Пример: запуск в безголовом режиме
    • Поиск элементов страницы
    • Взаимодействие с элементами
    • Извлечение данных
    • Ожидание загрузки элементов
  3. Обход защиты от скрапинга
  4. Заключение

Что такое веб-скрапинг?

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

Процесс веб-скрапинга обычно включает следующие шаги:

  • Отправка HTTP-запроса: Программно отправлять запрос на целевой веб-сайт для получения HTML-кода исходного кода веб-страницы. Для этого легко использовать такие распространенные инструменты, как библиотека requests для Python.
  • Разбор HTML-контента: После получения HTML-кода исходного кода его необходимо разобрать для извлечения необходимых данных. Для обработки структуры HTML можно использовать библиотеки парсинга, такие как BeautifulSoup или lxml.
  • Извлечение данных: На основе разобранной структуры HTML находить и извлекать конкретные содержимое, такие как заголовок статьи, информацию о цене, ссылки на изображения и т.д. Часто используемые методы включают использование XPath или CSS-селекторов.
  • Хранение данных: Сохранение извлеченных данных в подходящее хранилище, такое как база данных, CSV-файл или JSON-файл для последующего анализа и обработки.

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

Проблемы, связанные с повторяющимся отказом в полном решении раздражающего капча, решаются?

Встречайте безшовное автоматическое решение капчи с технологией AI-powered Auto Web Unblock от Capsolver!

Получите свой бонусный код для лучших решений капчи, CapSolver: WEBS. После его активации вы получите дополнительный бонус в размере 5% после каждой пополнения.

Начало работы с Selenium

Давайте возьмем в качестве примера ScrapingClub и используем Selenium для выполнения упражнения номер один.

Подготовка

Сначала вам нужно убедиться, что Python установлен на вашем компьютере. Вы можете проверить версию Python, введя следующую команду в вашем терминале:

python --version

Убедитесь, что версия Python выше 3. Если он не установлен или версия слишком низкая, загрузите последнюю версию с официального сайта Python. Затем вам нужно установить библиотеку selenium с помощью следующей команды:

pip install selenium

Импорт библиотек

from selenium import webdriver

Доступ к странице

Использование Selenium для управления Google Chrome для доступа к странице несложно. После инициализации объекта Chrome Options вы можете использовать метод get() для доступа к целевой странице:

import time
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://scrapingclub.com/')

time.sleep(5)
driver.quit()

Параметры запуска

Chrome Options может добавлять множество параметров запуска, которые помогают улучшить эффективность извлечения данных. Вы можете просмотреть полный список параметров на официальном сайте: Список командных ключей Chromium. В таблице ниже приведены некоторые распространенные параметры:

Параметр Назначение
--user-agent="" Установка User-Agent в заголовке запроса
--window-size=xxx,xxx Установка разрешения браузера
--start-maximized Запуск с максимальным разрешением
--headless Запуск в безголовом режиме
--incognito Запуск в режиме инкогнит

о |
| --disable-gpu | Отключение аппаратного ускорения GPU|

Пример: запуск в безголовом режиме

import time
from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://scrapingclub.com/')

time.sleep(5)
driver.quit()

Поиск элементов страницы

Необходимый этап при скрапинге данных — найти соответствующие элементы HTML в DOM. Selenium предоставляет два основных метода для поиска элементов на странице:

  • find_element: Находит один элемент, соответствующий критериям.
  • find_elements: Находит все элементы, соответствующие критериям.

Оба метода поддерживают восемь различных способов для локализации элементов HTML:

Метод Назначение Пример HTML Пример Selenium
By.ID Локализация по ID элемента <form id="loginForm">...</form> driver.find_element(By.ID, 'loginForm')
By.NAME Локализация по имени элемента <input name="username" type="text" /> driver.find_element(By.NAME, 'username')
By.XPATH Локализация по XPath <p><code>My code</code></p> driver.find_element(By.XPATH, "//p/code")
By.LINK_TEXT Локализация гиперссылки по тексту <a href="continue.html">Continue</a> driver.find_element(By.LINK_TEXT, 'Continue')
By.PARTIAL_LINK_TEXT Локализация гиперссылки по части текста <a href="continue.html">Continue</a> driver.find_element(By.PARTIAL_LINK_TEXT, 'Conti')
By.TAG_NAME Локализация по имени тега <h1>Welcome</h1> driver.find_element(By.TAG_NAME, 'h1')
By.CLASS_NAME Локализация по имени класса <p class="content">Welcome</p> driver.find_element(By.CLASS_NAME, 'content')
By.CSS_SELECTOR Локализация по CSS-селектору <p class="content">Welcome</p> driver.find_element(By.CSS_SELECTOR, 'p.content')

Вернемся к странице ScrapingClub и напишем следующий код для поиска элемента кнопки "Get Started" для первого упражнения:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://scrapingclub.com/')
get_started_button = driver.find_element(By.XPATH, "//div[@class='w-full rounded border'][1]/div[3]")

time.sleep(5)
driver.quit()

Взаимодействие с элементами

После того как мы найдем элемент кнопки "Get Started", нам нужно нажать на кнопку, чтобы перейти на следующую страницу. Это включает взаимодействие с элементом. Selenium предоставляет несколько методов для имитации действий:

  • click(): Нажать на элемент;
  • clear(): Очистить содержимое элемента;
  • send_keys(*value: str): Имитировать ввод с клавиатуры;
  • submit(): Отправить форму;
  • screenshot(filename): Сохранить снимок экрана страницы.

Для дополнительных взаимодействий см. официальную документацию: API WebDriver. Давайте продолжим улучшать код упражнения ScrapingClub, добавив взаимодействие с кликом:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://scrapingclub.com/')
get_started_button = driver.find_element(By.XPATH, "//div[@class='w-full rounded border'][1]/div[3]")
get_started_button.click()

time.sleep(5)
driver.quit()

Извлечение данных

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

from selenium import webdriver
from selenium.webdriver.common.by import By

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://scrapingclub.com/')
get_started_button = driver.find_element(By.XPATH, "//div[@class='w-full rounded border'][1]/div[3]")
get_started_button.click()

product_name = driver.find_element(By.CLASS_NAME, 'card-title').text
product_image = driver.find_element(By.CSS_SELECTOR, '.card-img-top').get_attribute('src')
product_price = driver.find_element(By.XPATH, '//h4').text
product_description = driver.find_element(By.CSS_SELECTOR, '.card-description').text

print(f'Product name: {product_name}')
print(f'Product image: {product_image}')
print(f'Product price: {product_price}')
print(f'Product description: {product_description}')

driver.quit()

Код выведет следующее содержимое:

Product name: Майка с длинным рукавом из джерси
Product image: https://scrapingclub.com/static/img/73840-Q.jpg
Product price: $12.99
Product description: Сознательная. Облегающая майка с длинным рукавом из органического хлопка с круглым вырезом. 92% хлопок, 3% спандекс, 3% вискоза, 2% полиэстер.

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

Иногда из-за сетевых проблем или других причин элементы могут еще не загрузиться, когда 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

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://scrapingclub.com/')
get_started_button = driver.find_element(By.XPATH, "//div[@class='w-full rounded border'][1]/div[3]")
get_started_button.click()

# ожидание полной загрузки элементов изображения продукта
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.card-img-top')))

product_name = driver.find_element(By.CLASS_NAME, 'card-title').text
product_image = driver.find_element(By.CSS_SELECTOR, '.card-img-top').get_attribute('src')
product_price = driver.find_element(By.XPATH, '//h4').text
product_description = driver.find_element(By.CSS_SELECTOR, '.card-description').text

print(f'Product name: {product_name}')
print(f'Product image: {product_image}')
print(f'Product price: {product_price}')
print(f'Product description: {product_description}')

driver.quit()

Обход защиты от скрапинга

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

огут обнаружить ваш сценарий как бота и заблокировать сбор. Самая распространенная ситуация — это капча, такие как funcaptcha, datadome, recaptcha, hcaptcha, geetest и др.

Для решения этих вызовов капчи требуется обширный опыт в машинном обучении, обратной инженерии и контрмер по браузерному отпечатку, что может занять много времени. К счастью, теперь вам не нужно делать всю эту работу самостоятельно. CapSolver предоставляет полное решение, чтобы помочь вам легко обойти все вызовы. CapSolver предлагает браузерные расширения, которые автоматически решают вызовы капчи при использовании Selenium для сбора данных. Кроме того, они предоставляют API-методы для решения вызовов капчи и получения токенов, что можно выполнить всего за несколько секунд. Смотрите документацию CapSolver для получения дополнительной информации.

Вывод

От извлечения деталей продукта до навигации через сложные анти-скрапинговые меры, скрапинг веб-страниц с помощью Selenium открывает двери в огромный мир автоматизированного сбора данных. При переходе по постоянно изменяющемуся ландшафту веба инструменты, такие как CapSolver, предоставляют возможность более плавного извлечения данных, что делает ранее сложные задачи в прошлом. Так что, будь то энтузиаст данных или опытный разработчик, использование этих технологий не только повышает эффективность, но и открывает мир, где доступ к аналитике, основанной на данных, всего лишь в одном скрэпе

Ещеe

Scrapy против Selenium: Что лучше для вашего проекта веб-скрапинга
Scrapy против Selenium: Что лучше для вашего проекта веб-скрапинга

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

The other captcha
Logo of Capsolver

Nikolai Smirnov

25-Jul-2024

API против парсинга
API против парсинга: лучший способ получения данных

Разберитесь в различиях, плюсах и минусах веб-скрапинга и API-скрапинга, чтобы выбрать лучший метод сбора данных. Изучите CapSolver для решения задач, связанных с ботами.

The other captcha
Logo of Capsolver

Nikolai Smirnov

16-Jul-2024

Использование Selenium и C# для автоматизации вызовов CAPTCHA
Использование Selenium и C# для автоматизации вызовов CAPTCHA

В конце этого урока вы будете иметь полное представление о том, как решить CAPTCHA с помощью Selenium C#.

The other captcha
Logo of Capsolver

Nikolai Smirnov

11-Jul-2024

Что такое Puppeteer
Что такое Puppeteer и как его использовать для веб-скрапинга | Полное руководство 2024

Это полное руководство расскажет о том, что такое Puppeteer и как эффективно использовать его для веб-скрапинга

The other captcha
Logo of Capsolver

Nikolai Smirnov

10-Jul-2024

Что такое веб-скрейпинг
Что такое веб-скрейпинг | Распространенные случаи использования и проблемы

Познакомьтесь с веб-скреппингом: узнайте о его преимуществах, легко справляйтесь с проблемами и развивайте свой бизнес с помощью CapSolver.

The other captcha
Logo of Capsolver

Nikolai Smirnov

05-Jul-2024

CapSolver Dashboard 3.0!
Повышайте уровень с CapSolver Dashboard 3.0!

CapSolver Dashboard 3.0 обновлён с улучшенным взаимодействием и множеством новых функций.

The other captcha
Logo of Capsolver

Nikolai Smirnov

04-Jul-2024