Посібник із Selenium у Ruby для вебскрапінгу
Якщо ви шукаєте альтернативи створенню власних вебскраперів, перегляньте нашу статтю про найкращі інструменти вебскрапінгу. Відкрийте для себе найкращі інструменти, які можуть спростити ваші проєкти з видобування даних.
Let’s get started!
Навіщо використовувати Selenium для вебскрапінгу?
Вебскрапінг полягає в автоматичному вилученні даних із вебсторінок. Хоча базовий вебскрапінг можна виконувати за допомогою бібліотек на кшталт Nokogiri, деякі сайти використовують JavaScript для динамічного завантаження контенту. Традиційні вебскрапери мають труднощі із отриманням даних із таких сайтів.
Саме тут Selenium Це допомагає. Воно дає змогу Ruby-скриптам керувати реальними браузерами, взаємодіяти з сайтами на JavaScript і витягувати потрібні дані. Також ви можете дізнатися, як скрапити сайти за допомогою Selenium і PHP у цю статтю.
Деякі переваги Selenium для вебскрапінгу:
- Опрацьовує динамічний контент: Воно може взаємодіяти зі сторінками на JavaScript.
- Імітує поведінку людини: Selenium може натискати кнопки, прокручувати сторінку та заповнювати форми.
- Підтримка різних браузерів: Працює з Chrome, Firefox, Edge та іншими браузерами.
- Flexible: Підтримує кілька мов програмування, зокрема Ruby.
Налаштування Selenium у Ruby
Крок 1: Встановіть Selenium для Ruby
Install Ruby
Спершу перевірте, чи встановлено у вас Ruby. Відкрийте термінал і введіть:
ruby -v
If Ruby is not installed, download it from ruby-lang.org.
Install Required Gems
Для Selenium потрібен gem selenium-webdriver. Встановіть його за допомогою:
gem install selenium-webdriver
Тепер ви готові почати вебскрапінг.
Крок 2: Створіть вебскрапер Selenium
Налаштуйте Ruby-проєкт
Створіть нову папку для вашого проєкту:
mkdir selenium-ruby-scraper
cd selenium-ruby-scraper
Усередині папки створіть новий файл Ruby:
touch scraper.rb
Now, open scraper.rb in your preferred text editor.
Initialize Selenium WebDriver
In scraper.rb, write the following code:
require "selenium-webdriver"
# Set up browser options
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument(" - headless") # Run in headless mode (no GUI)
# Initialize WebDriver
driver = Selenium::WebDriver.for :chrome, options: options
# Open the target website
driver.navigate.to "https://scrapingclub.com/exercise/list_infinite_scroll/"
# Get and print page source
puts driver.page_source
# Close the browser
driver.quit
Збережіть файл і запустіть його:
ruby-скрапер.rb
Якщо все правильно, скрипт виведе HTML сторінки в термінал.
Крок 3: Витягніть дані з вебсторінки
Тепер витягнімо конкретну інформацію. Цільова вебсторінка містить списки товарів. У кожного товару є назва та ціна.
Змініть вебскрапер.rb:
require "selenium-webdriver"
# Define Product structure
Product = Struct.new(:name, :price)
# Set up browser options
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument(" - headless")
# Initialize WebDriver
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://scrapingclub.com/exercise/list_infinite_scroll/"
# Find all products
products = []
html_products = driver.find_elements(:css, ".post")
# Extract product details
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
# Print extracted data
products.each { |product| puts "Ім’я: #{product.name}, Ціна: #{product.price}" }
# Close the browser
driver.quit
Запустіть скрипт ще раз:
ruby-скрапер.rb
Тепер ви маєте побачити назви товарів і ціни в терміналі.
Крок 4: Обробка нескінченного прокручування
Деякі сайти використовують нескінченне прокручування, тобто вміст завантажується під час прокручування сторінки користувачем. Selenium дає змогу імітувати таку поведінку.
Змініть вебскрапер.rb:
# Scroll down to load more products
10.times do
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(1) # Allow time for content to load
end
# Wait for the last product to load
wait = Selenium::WebDriver::Wait.new(timeout: 10)
wait.until { driver.find_element(:css, ".post:nth-child(60)") }
Крок 5: Збереження даних у CSV
Отримані дані корисніші, якщо зберігати їх у структурованому форматі, наприклад CSV.
Modify scraper.rb:
require "csv"
# Save data to CSV
CSV.open("products.csv", "wb", write_headers: true, headers: ["Name", "Price"]) do |csv|
products.each { |product| csv << product }
end
puts "Data saved to products.csv"
Run the script again, and you will find a products.csv file in your project folder.
Крок 6: Використайте проксі для анонімності
Деякі сайти блокують скраперів, виявляючи багаторазові запити з однієї IP-адреси. Використання проксі може допомогти уникнути бану.
Modify scraper.rb:
# Set up proxy
proxy = "http://72.10.160.174:22669"
options.add_argument(" - proxy-server=#{proxy}")
Це спрямовуватиме запити через вказаний проксі.
Крок 7: Уникайте блокування
Щоб уникнути блокування:
- Use Ротаційні проксі.
- Встановіть випадкові рядки 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}")
For a scraping API, use:
driver.navigate.to "https://api.brightdata.com/v1/?apikey=YOUR_API_KEY&url=https://targetsite.com"
Conclusion
Selenium — це потужний інструмент для автоматизації взаємодії з вебсайтами та вилучення даних. Водночас важливо виконувати вебскрапінг відповідально — дотримуйтеся умов користування сайтами, не перевантажуйте сервери та використовуйте API, якщо вони доступні.
Тепер, коли ви опанували Selenium у Ruby, спробуйте вебскрапінг різних сайтів і поекспериментуйте з розширеними сценаріями взаємодії!

