Руководство по веб-парсингу с помощью Selenium

Это единственное пошаговое руководство, которое вам понадобится, чтобы менее чем за 10 минут начать собирать веб-данные с целевых сайтов и сохранять их в виде CSV-файлов
2 min read
How to use Selenium for web scraping

В этой статье мы рассмотрим:

Соответствующий репозиторий GitHub для этой статьи можно найти здесь.

Selenium: что это такое и как его используют

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

  • действия на веб-странице и извлечение элементов из нее (например, закрыть, назад, get_cookie, get_screenshot_as_png, get_window_size);
  • тестирование сайтов;
  • управление предупреждениями и файлами cookie (добавление и удаление);
  • отправка элементов форм;
  • сбор данных и веб-парсинг.

Этот инструмент совместим с большинством браузеров, включая Firefox, Chrome, Safari и Internet Browser. Его можно использовать для написания тестовых программ на различных языках программирования, таких как Python, Node.js, C#, JavaScript и PHP. 
Для вашего удобства приводится ссылка на официальную библиотеку документации по Selenium 4.1.5 .

Сравнение Puppeteer и Selenium

Тем из вас, кто обсуждает и обдумывает вопросы сравнения Puppeteer и Selenium, скажу, что Puppeteer будет полезнее, если вы планируете сосредоточиться в основном на JavaScript и Chrome. С другой стороны, Selenium может оказаться лучшим выбором, если вы хотите работать в нескольких разных браузерах для тестирования браузерных приложений и/или сбора веб-данных.

Пошаговое руководство по парсингу с помощью Selenium

Первый шаг. Установка Selenium 

Тем из вас, у кого на компьютерах есть программа pip (например, установщик пакетов для Python), достаточно открыть ее и ввести следующее:

pip install -U selenium

В противном случае вы можете загрузить программу PyPI, разархивировать и запустить ее:

python setup.py install

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

Давайте возьмем, например, браузер Firefox. Откройте Firefox, зайдите на веб-страницу, например Yahoo, выполните поиск по слову «seleniumhq», а затем закройте браузер. Вот как это будет выглядеть в коде:

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

browser = webdriver.Firefox()

browser.get('http://www.yahoo.com')
assert 'Yahoo' in browser.title

elem = browser.find_element(By.NAME, 'p')  # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)

browser.quit()

Второй шаг. Импорт вспомогательных пакетов

Selenium используется не изолированно, а в тандеме с другими программами, включая, например, Pandas (простой в использовании инструмент анализа данных с открытым исходным кодом). Вот что вам нужно ввести для этой цели:

from selenium import webdriver
import time
import pandas as pd 

Третий шаг. Определение переменных 

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

FILE_PATH_FOLDER = 'F:....Competitive_Analysis'
search_query = 'https://www.linkedin.com/q-chief-financial-officer-jobs.html'
driver = webdriver.Chrome(executable_path='C:/.../chromedriver_win32/chromedriver.exe')
job_details = []

Четвертый шаг. Проверка HTML-тегов

HTML-сайты обычно имеют уникальный идентификатор для каждого тега, связанного с информацией, отображаемой на любом целевом сайте. Здесь данное свойство HTML-сайта используется для сканирования целевого сайта. Тег можно увидеть следующим образом:

  • Щелкните правой кнопкой мыши в любом месте страницы и нажмите «проверить»
  • Затем нажмите на стрелку, которая появляется в верхнем левом углу, или клавиши Ctrl+Shift+C, чтобы проверить определенный элемент и получить желаемый HTML-тег. 

Вот как это выглядит:

driver.get(search_query)
time.sleep(5)
job_list = driver.find_elements_by_xpath("//div[@data-tn-component='organicJob']")

Пятый шаг. Извлечение определенных точек данных

Мы извлечем целевые точки данных, используя атрибут find_elements_by_xpath в веб-драйвере Selenium, закроем драйвер и затем браузер после сбора целевых данных. 

Мы будем нацеливаться на следующие точки данных:

  • Должность
  • Компания
  • Место выполнения работы
  • Должностные обязанности
  • Дата загрузки информации о вакансии 

Вот как это выглядит:

for each_job in job_list:
    # Getting job info
    job_title = each_job.find_elements_by_xpath(".//h2[@class='title']/a")[0]
    job_company = each_job.find_elements_by_xpath(".//span[@class='company']")[0]
    job_location = each_job.find_elements_by_xpath(".//span[@class='location accessible-contrast-color-location']")[0]
    job_summary = each_job.find_elements_by_xpath(".//div[@class='summary']")[0]
    job_publish_date = each_job.find_elements_by_xpath(".//span[@class='date ']")[0]
    # Saving job info 
    job_info = [job_title.text, job_company.text, job_location.text, job_summary.text, job_publish_date.text]
 # Saving into job_details
    job_details.append(job_info)
driver.quit()

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

Шестой шаг. Сохранение данных при подготовке к выводу

На этом этапе следует добавить столбцы во фрейм данных и использовать атрибут to_csv, чтобы сохранить все полученные данные в формате CSV следующим образом:

job_details_df = pd.DataFrame(job_details)
job_details_df.columns = ['title', 'company', 'location', 'summary', 'publish_date']
job_details_df.to_csv('job_details.csv', index=False)

Желаемый CSV-файл будет загружен в следующую папку:  FILE_PATH_FOLDER

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

Интеграция прокси-серверов и Selenium

Интегрировав прокси-серверы и свой парсер, созданный в Selenium, вы можете:

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

Для начала создайте аккаунт Bright Data и выберите тип прокси-сети. Затем перейдите в Selenium и введите «IP-адрес прокси-сервера: порт» в функции «SetProxy», например brd.superproxy.io:22225, как для протокола HTTP, так и для протокола HTTPS.

В разделе «sendKeys» введите идентификатор своего аккаунта Bright Data и имя прокси-зоны brd-customer-CUSTOMER-zone-YOURZONE и пароль вашей зоны из ее настроек.