У цьому посібнику я покажу вам, як налаштувати Selenium з Ruby, збирати дані та обробляти динамічний контент. В кінці у вас буде працюючий веб-скрепер для збору даних з реальних сайтів.
Якщо ви шукаєте альтернативи для створення власних веб-скреперів, ознайомтесь з нашою статтею про найкращі інструменти для веб-скрапінгу. Дізнайтеся про найкращі інструменти, які можуть спростити ваші проекти з витягнення даних.
Давайте почнемо!
Чому варто використовувати Selenium для веб-скрапінгу?
Веб-скрапінг полягає у автоматичному витягуванні даних зі сторінок вебсайтів. Основний скрапінг можна зробити за допомогою бібліотек, таких як Nokogiri, але деякі вебсайти використовують JavaScript для динамічного завантаження контенту. Традиційні скрапери мають проблеми з отриманням даних з таких сайтів.
Тут на допомогу приходить Selenium. Він дозволяє Ruby-скриптам керувати реальними браузерами, взаємодіяти з вебсайтами на основі JavaScript і витягувати необхідні дані. Ви також можете дізнатися, як здійснювати веб-скрапінг з Selenium і PHP у цій статті.
Ось деякі переваги Selenium для веб-скрапінгу:
- Обробка динамічного контенту: може взаємодіяти зі сторінками на основі JavaScript.
- Імітує поведінку людини: Selenium може натискати кнопки, прокручувати сторінки та заповнювати форми.
- Підтримка різних браузерів: працює з Chrome, Firefox, Edge та іншими браузерами.
- Гнучкість: підтримує кілька мов програмування, включаючи Ruby.
Налаштування Selenium в Ruby
Крок 1: Встановлення Selenium для Ruby
Встановлення Ruby
Перш за все, перевірте, чи встановлений у вас Ruby. Відкрийте термінал і введіть:
ruby -v
Якщо Ruby не встановлено, завантажте його з ruby-lang.org.
Встановлення необхідних гемів
Selenium вимагає гем selenium-webdriver. Встановіть його за допомогою:
gem install selenium-webdriver
Тепер ви готові почати скрапити.
Крок 2: Створення веб-скрепера на Selenium
Налаштування Ruby-проекту
Створіть нову папку для вашого проекту:
mkdir selenium-ruby-scraper
cd selenium-ruby-scraper
Всередині папки створіть новий Ruby файл:
touch scraper.rb
Тепер відкрийте scraper.rb у вашому улюбленому текстовому редакторі.
Ініціалізація Selenium WebDriver
У файлі scraper.rb напишіть наступний код:
require "selenium-webdriver"
# Налаштування параметрів браузера
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument(" - headless") # Запуск в безголовому режимі (без GUI)
# Ініціалізація WebDriver
driver = Selenium::WebDriver.for :chrome, options: options
# Відкриття цільового вебсайту
driver.navigate.to "https://scrapingclub.com/exercise/list_infinite_scroll/"
# Отримання та виведення вихідного коду сторінки
puts driver.page_source
# Закриття браузера
driver.quit
Збережіть файл і запустіть його:
ruby scraper.rb
Якщо все правильно, скрипт виведе HTML сторінки в термінал.
Крок 3: Витягування даних зі сторінки
Тепер давайте витягнемо конкретну інформацію. Цільова вебсторінка містить списки продуктів.
Кожен продукт має назву та ціну.
Змініть scraper.rb:
require "selenium-webdriver"
# Оголосити структуру продукту
Product = Struct.new(:name, :price)
# Налаштування параметрів браузера
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument(" - headless")
# Ініціалізація WebDriver
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://scrapingclub.com/exercise/list_infinite_scroll/"
# Знайти всі продукти
products = []
html_products = driver.find_elements(:css, ".post")
# Витягнути деталі продуктів
html_products.each do |html_product|
name = html_product.find_element(:css, "h4").text
price = html_product.find_element(:css, "h5").text
products << Product.new(name, price)
end
# Вивести витягнуті дані
products.each { |product| puts "Name: #{product.name}, Price: #{product.price}" }
# Закрити браузер
driver.quit
Запустіть скрипт знову:
ruby scraper.rb
Тепер ви побачите назви продуктів та ціни в терміналі.
Крок 4: Обробка нескінченного скролінгу
Деякі вебсайти використовують нескінченний скролінг, що означає, що контент завантажується по мірі прокручування сторінки. Selenium дозволяє нам імітувати таку поведінку.
Змініть scraper.rb:
# Прокручування вниз для завантаження більше продуктів
10.times do
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(1) # Дати час для завантаження контенту
end
# Очікування завантаження останнього продукту
wait = Selenium::WebDriver::Wait.new(timeout: 10)
wait.until { driver.find_element(:css, ".post:nth-child(60)") }
Крок 5: Збереження даних у CSV
Витягнуті дані будуть більш корисними, якщо зберігати їх у структурованому форматі, наприклад CSV.
Змініть scraper.rb:
require "csv"
# Зберегти дані у CSV
CSV.open("products.csv", "wb", write_headers: true, headers: ["Name", "Price"]) do |csv|
products.each { |product| csv << product }
end
puts "Дані збережено у products.csv"
Запустіть скрипт знову, і ви знайдете файл products.csv у вашій папці з проектом.
Крок 6: Використання проксі для анонімності
Деякі вебсайти блокують скрапери, виявляючи багато запитів з одного і того ж IP. Використання проксі допоможе уникнути блокувань.
Змініть scraper.rb:
# Налаштування проксі
proxy = "http://72.10.160.174:22669"
options.add_argument(" - proxy-server=#{proxy}")
Це спрямовуватиме запити через зазначений проксі.
Крок 7: Як уникнути блокування
Щоб уникнути блокування:
- Використовуйте ротаційні проксі.
- Встановлюйте випадкові user agent'и.
- Сповільнюйте запити за допомогою sleep().
- Використовуйте сервіси, такі як Scraping Browser від Bright Data для обходу анти-бот заходів.
Приклад встановлення user agent:
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
options.add_argument(" - user-agent=#{user_agent}")
Для scraping API використовуйте:
driver.navigate.to "https://api.brightdata.com/v1/?apikey=YOUR_API_KEY&url=https://targetsite.com"
Висновок
Selenium — потужний інструмент для автоматизації веб-взаємодій та витягування даних. Однак важливо здійснювати скрапінг відповідально: поважати умови використання вебсайтів, уникати перевантаження серверів і використовувати API, коли це можливо.
Тепер, коли ви освоїли Selenium в Ruby, спробуйте скрапити різні вебсайти та експериментуйте з більш складними взаємодіями!
Цікавить інші посібники з веб-скрапінгу?
- Веб-скрапінг з Scrapy
- Веб-скрапінг з Selenium
- [JavaScript vs.]
- Python для веб-скрапінгу
- Веб-скрапінг з Python lxml
- Веб-скрапінг з Excel
- Веб-скрапінг з Python
- Веб-скрапінг з C#
- Скрапінг найкращих товарів Amazon
- Веб-скрапінг з Google Sheets
- Як обійти Cloudflare для веб-скрапінгу
- Посібник по обмеженню запитів
Перекладено з: Selenium in Ruby for Web Scraping Guide