темный логотип proxyscrape

Selenium Web Scraping - все, что вам нужно знать в 2024 году

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

Сбор данных - термин, который активно используется в последнее десятилетие. Каждая компания хочет знать своих клиентов полностью, чтобы разработать наилучшую стратегию для решения проблем людей. Обычно технологические организации имеют озера данных, чтобы получать данные для анализа. Но иногда им приходится собирать данные в Интернете для проведения различных анализов, таких как анализ настроений, SEO-анализ и мониторинг. Веб-скрепинг - это подход к извлечению данных из целевого источника и сохранению их в локальном или облачном хранилище. Python - лучший язык программирования для выполнения веб-скрепинга. В Python существует множество библиотек, которые помогут вам соскребать данные с веб-сайтов, блогов и других источников в Интернете. Самые известные из них - BeautifulSoup и Selenium. В этой статье мы рассмотрим, как выполнить веб-скреппинг с помощью selenium.

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

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

Селен - что это такое?

Selenium - это бесплатная библиотека с открытым исходным кодом на языке python, которая представляет собой фреймворк для автоматизированного тестирования, используемый в основном для проверки и тестирования веб-приложений в различных браузерах. Вы можете использовать любой язык программирования, такой как C#, Java и мой любимый - Python. Программное обеспечение Selenium представляет собой набор инструментов, состоящий из:

  • Интегрированная среда разработки (IDE) Selenium.
  • Пульт дистанционного управления Selenium.
  • Webdriver.
  • Selenium Grid.

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

Постановка проблемы:

Наша цель - собрать имена и зарплаты игроков NBA за последнее десятилетие, а затем сохранить данные в формате data frame. ПРИМЕЧАНИЕ: Чтобы узнать и объяснить, как работает Selenium для веб-скрепинга, мы используем сайт hoopshype.

Установка драйвера Chrome:

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

ШАГ 1: Откройте браузер Chrome -> нажмите на значок "Гамбургер", который находится в правом верхнем углу браузера.

ШАГ 2: После нажатия на значок "Гамбургер" вы увидите опцию "Помощь". Нажмите на "Помощь" и выберите "О браузере Хром". После этого откроется страница версии. На изображении ниже представлена страница версии Google Chrome.

Окно версии Google Chrome

Примечание: Если у вас есть какие-либо обновления, лучше всего установить их до установки драйвера chrome.

Узнав версию, перейдите на сайт драйверов chrome и загрузите драйвер в соответствии с установленной версией Chrome.

Установите Selenium:

Самый простой способ установить пакет selenium - через PIP (Package Installer Python). Вы можете открыть любой блокнот, либо Juypter, либо Google Collab, и ввести следующий python-код:

pip install selenium

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

Веб-скраппинг с помощью Selenium:

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

ШАГ 1: Импортируйте все необходимые библиотеки. Pandas и Selenium webdriver являются основными библиотеками для простого веб-скреппинга. Ниже приведен код python для импорта всех необходимых библиотек:

from selenium import webdriver
из selenium.webdriver.common.keys import keys
import pandas as pd

ШАГ 2: После импорта библиотек следующим шагом будет запуск драйвера Chrome. Ниже показан код на языке python для запуска драйвера

driver = webdriver.Chrome(r"\Selenium\chromedriver.exe")

ПРИМЕЧАНИЕ: В аргументе укажите полный путь к месту расположения драйвера Chrome в вашей локальной системе.

ШАГ 3: Как только вы запустите драйвер, браузер Chrome должен открыться в новом окне. Но окно должно быть пустым, так как URL фида отсутствует. Ниже приведен python-код для URL целевой ленты:

seed_url = 'https://hoopshype.com/salaries/players/'
driver.get(seed_url)

ШАГ 4: После ввода URL-адреса канала в новом окне должен появиться целевой сайт. Следующий процесс заключается в поиске имени каждого игрока NBA. В Selenium вы можете найти элементы HTML следующими способами:

  • ID
  • CSS-селектор
  • Селектор XPATH
  • Имя
  • Название класса
  • Название тега

В нашем примере рассмотрим, как определить элементы с помощью селектора XPATH. Мы хотим извлечь из этих данных две детали:

  • Имя игрока
  • Зарплата

Примечание: Для поиска веб-элементов можно также использовать форму поиска. Форма поиска находится в нижней части страницы Inspect.

ШАГ 5: Когда вы попадете на целевую страницу, вы увидите список игроков и их зарплаты за сезон (год). Выберите любое имя игрока и щелкните его правой кнопкой мыши. Появится несколько вариантов. В этих вариантах нажмите "Проверить". На изображении ниже представлена страница Inspect.

Проверьте страницу целевого объекта

Как уже говорилось выше, цель состоит в том, чтобы извлечь имена игроков. Поэтому первым шагом будет поиск элемента одного игрока и общего фактора для всех элементов игроков. В том же процессе щелкните правой кнопкой мыши на имени игрока и проинспектируйте его. Это приведет вас прямо к местоположению элемента. Вместо того чтобы брать имя одного игрока, в нашем сценарии мы берем имена всех игроков. Общим элементом для всех игроков является "td class-'name'". Поэтому, если мы используем этот элемент и зациклим его, мы получим имена всех игроков. Код на языке python для извлечения имени игрока показан ниже:

nba_players = driver.find_elements_by_xpath('//td[@class="name"]')
players_list = []
for p in range(len(nba_players)):
    players_list.append(nba_players[p].text)
print(players_list)

Объяснение: Как было сказано выше, мы находим элемент HTML-кода, используя подход XPATH. Очевидно, что нам нужен XPATH-путь к нескольким элементам. Самый простой способ - найти элемент name, который называется "td class-name". Щелкните правой кнопкой мыши на этом элементе и выберите "Копировать". У вас появится множество вариантов, таких как копировать путь JS и копировать XPATH. Выберите "Копировать XPATH", и вы автоматически получите XPATH-путь к элементу. Вставьте этот путь в аргумент find_elements_by_XPATH. Как только вы вставите путь, Python начнет определять эти элементы и получать их адреса, а не реальные имена. Чтобы получить реальные имена игроков, мы зациклим функцию и добавим результаты в пустой список в качестве вывода. После выполнения приведенного выше фрагмента кода вы должны получить результат, как показано на изображении ниже.

Выходные данные для извлечения имен игроков

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

ШАГ 6: Данные о зарплате извлекаются с помощью кода на языке python, как показано ниже:

players_salary=driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]')
список_зарплат=[]
for s in range(len(players_salary)):
    salary_list.append(players_salary[s].text)
print(список_зарплат)

Объяснение: Процесс один и тот же. Единственное отличие - общий элемент для игроков. Общим элементом является веб-элемент "td class-'hh-salaries-sorted'". После нахождения элемента мы создаем пустой список, чтобы зациклить всю функцию, и добавляем данные о зарплате в пустой список. Результат должен выглядеть так, как показано на рисунке ниже:

Выходные данные для извлечения зарплаты игроков

ШАГ 7: Теперь мы собрали данные с нашей цели. Но, если присмотреться, данные относятся только к одному сезону (текущему году). В нашей постановке задачи говорится о необходимости извлечь данные за последнее десятилетие. Здесь на помощь приходит автоматизация браузера. Не стоит беспокоиться. Мы можем использовать тот же код для сезона в качестве функции цикла. Ниже приведен код на языке python для автоматизации процесса скраппинга и получения данных за последнее десятилетие:

for i in range(2010,2021):
    page_number = str(i) + '-' + str(i+1) +'/'
    feed_url = 'https://hoopshype.com/salaries/players/' + page_number
    driver.get(feed_url)
    
    игроки = driver.find_elements_by_xpath('//td[@class="name"]')
    зарплаты = driver.find_elements_by_xpath('//td[@class="hh-salaries-sorted"]]') 
    
    игрок = []
   for j in range(len(players)):
        player.append(players[j].text)
    
    зарплата = []
   for k in range(len(salaries)):
        salary.append(salaries[k].text)

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

ШАГ 8: Последний шаг - сохранение данных во фрейме данных для проведения различных анализов, таких как анализ настроений и конкурентный анализ. Код на языке python для сохранения данных во фрейме данных показан ниже:

df = pd.DataFrame(columns=['Player','Salary','Year'])
data = list(zip(player[1:],salary[1:])) 
df1 = pd.DataFrame(data, columns=['Player','Salary']) 
df1['Год'] = i
df = df.append(df1)

ПРИМЕЧАНИЕ: Во второй строке кода видно, что я выполнил нарезку. Причина в том, что при выводе имен и зарплат игроков первым индексом, т. е. индексом 0, были "PLAYER" и "DATE". Эти элементы не имеют большого значения для таблицы. Поэтому мы можем отбросить эти элементы.

Пояснение: Мы создали пустой фрейм с колонками "Игрок", "Зарплата" и "Год". Мы собираем все данные в один список с помощью функции Zip, чтобы добавить список в кадр данных. Когда данные добавлены в рамку данных, пора завершить автоматизацию и закрыть драйвер. При необходимости вы можете сохранить кадр данных в CSV-файл для хранилища данных.

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

Вопросы и ответы:

1. Подходит ли Selenium для веб-скреппинга?
Да, если вы планируете скреативить динамические веб-страницы, использующие JavaScript. Но это также хороший вариант для Python. Selenium - хорошая отправная точка для новичков, заинтересованных в веб-скрапинге.
2. Что лучше, BeautifulSoup или Selenium?
Ответ зависит от типа целевой веб-страницы и масштаба вашего проекта. Если вам нужно соскрести небольшую и хорошо структурированную статическую страницу, то лучше использовать BeautifulSoup. Если же ваш проект включает в себя сложные структурированные динамические веб-страницы, то лучшим вариантом может стать selenium web scraping.
3. Какие инструменты лучше всего подходят для веб-скреппинга?
Python - лучший и наиболее благоприятный инструмент для выполнения веб-скрепинга. Библиотеки python, такие как BeautifulSoup, Selenium и Request, а также другие инструменты, такие как Scrapy, являются лучшими инструментами для веб-скрепинга.

Заключение:

В этой статье показано, как установить драйвер Chrome в локальную систему для автоматизации небольшого процесса веб-скреппинга. В режиме реального времени работа с большим количеством данных (по размеру, например, МБ, ГБ, а иногда и ТБ) сопряжена со сложными этапами. Selenium - это хороший старт для новичков, интересующихся сбором данных, процессом скрейпинга и наукой о данных в целом. Как уже говорилось, сложный процесс веб-скреппинга требует много времени для сбора данных. Большинство веб-сайтов не разрешают сбор данных в течение длительного периода времени; как только вы достигнете этого порога, веб-сайт, скорее всего, заблокирует ваш IP-адрес и остановит процесс сбора данных. Чтобы избежать подобных трудностей, рекомендуется использовать прокси. ProxyScrape В нашем каталоге представлены отличные прокси-серверы, которые лучше всего подходят для решения задач, требующих больших затрат, таких как веб-скраппинг.

ОБРАТИТЕ ВНИМАНИЕ: Эта статья предназначена исключительно для обучения. Без соблюдения надлежащих правил выполнение веб-скреппинга может быть незаконным. Эта статья не поддерживает незаконный веб-скрепинг ни в какой форме.