В этой статье мы рассмотрим:
- Selenium: что это такое и как его используют
- Пошаговое руководство по парсингу с помощью Selenium
- Интеграция прокси-серверов и Selenium
Соответствующий репозиторий 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 и пароль вашей зоны из ее настроек.
Кредитная карта не требуется