Вебскрапінг за допомогою Watir Ruby

Вебскрапінг за допомогою Watir Ruby у 2026 році

У цій статті я проведу вас через налаштування Watir у Ruby і покажу, як витягувати дані, обробляти пагінацію, прокручувати сторінки та робити знімки екрана. Почнімо!

Що таке Watir і навіщо його використовувати?

Watir (Тестування вебзастосунків у Ruby) — це бібліотека Ruby, яка допомагає автоматизувати веббраузери для цілей тестування. Вона взаємодіє з такими браузерами, як Chrome, Firefox та Edge, щоб імітувати людські дії, як-от натискання кнопок, введення даних у форми та навігація між сторінками.

Хоча Watir спочатку був створений для тестування вебзастосунків, його також можна використовувати для вебскрапінгу. Watir може відтворювати JavaScript і взаємодіяти з динамічним контентом, що робить його придатним для вебскрапінгу сайтів, які потребують поведінки, схожої на людську, наприклад клацання або прокручування.

Як налаштувати Watir у Ruby

Перш ніж почати вебскрапінг, потрібно налаштувати Watir у Ruby. Нижче наведено кроки для встановлення необхідних інструментів і бібліотек.

Крок 1: Встановіть Ruby

Спершу переконайтеся, що Ruby встановлено у вашій системі. Ruby — це мова програмування, на якій побудовано Watir, і вона потрібна вам для запуску вашого скрапера. Завантажити Ruby можна з офіційного вебсайту тут.

Після встановлення Ruby ви також отримаєте доступ до gem, менеджера пакетів Ruby.

Крок 2: Встановіть Watir

Тепер, коли Ruby встановлено, ви можете інсталювати gem Watir. Відкрийте термінал і виконайте таку команду, щоб інсталювати Watir:

gem install watir

Крок 3: Створіть новий проєкт Ruby

Створіть нову папку для свого проєкту та ініціалізуйте новий Ruby-проєкт. Це дасть змогу керувати залежностями проєкту. У терміналі перейдіть до папки, де ви хочете зберігати свій проєкт, і виконайте таку команду:

bundle init

Це створить файл Gemfile у папці вашого проєкту. Відкрийте цей файл і додайте таку строку, щоб підключити gem Watir:

gem 'watir'

Далі встановіть gem, виконавши команду:

bundle install

Створення простого вебскрапера

Тепер, коли Watir налаштовано, давайте напишемо простий скрапер для витягування даних із вебсторінки.

Крок 1: Відкрийте сайт і отримайте HTML

Спочатку потрібно імпортувати бібліотеку Watir і створити новий екземпляр браузера. У цьому прикладі ми використаємо Chrome у режимі headless, тобто браузер працюватиме у фоновому режимі без відкриття GUI.

Ось базовий Ruby-скрипт для отримання HTML-вмісту вебсторінки:

require 'watir'
# Launch Chrome browser in headless mode
browser = Watir::Browser.new :chrome, headless: true
# Open the website
browser.goto('https://www.example.com')
# Get the HTML of the page
html_content = browser.html
# Print the HTML content
puts html_content
# Close the browser
browser.close

Крок 2: Витягніть конкретні дані

Далі витягнімо конкретні дані з вебсторінки. Припустімо, ви хочете вебскрапити назви товарів зі сторінки продукту. Ви можете використати методи браузера, щоб знаходити елементи та витягувати їхній текст.

Ось приклад, який витягує назви продуктів зі сторінки:

require 'watir'
# Launch Chrome browser in headless mode
browser = Watir::Browser.new :chrome, headless: true
# Open the website
browser.goto('https://www.example.com/products')
# Extract the product titles
product_titles = browser.divs(class: 'product-title').map(&:text)
# Print the product titles
puts product_titles
# Close the browser
browser.close

У цьому прикладі ми використовуємо метод divs, щоб знайти всі елементи з класом product-title, а потім витягнути їхній текст.

Handling Pagination

Багато сайтів розбивають свій вміст на кілька сторінок, тобто списки товарів розподілені між кількома сторінками. Якщо ви хочете зібрати всі товари, потрібно пройти через усі сторінки.

Let’s see how to handle pagination with Watir. We will click the “Next” button repeatedly until it is no longer available.

require 'watir'
# Launch Chrome browser in headless mode
browser = Watir::Browser.new :chrome, headless: true
# Open the website
browser.goto('https://www.example.com/products')
# List to store product titles
product_titles = []
# Loop through the pages
while browser.button(class: 'next').exists?
# Extract product titles from the current page
titles = browser.divs(class: 'product-title').map(&:text)
product_titles.concat(titles)
# Click the "Next" button to go to the next page
browser.button(class: 'next').click
# Wait for the next page to load
browser.wait
end
# Print the product titles
puts product_titles
# Close the browser
browser.close

Цей скрипт продовжуватиме натискати кнопку “Next”, доки вона існує. Щоразу після натискання він витягує назви товарів із поточної сторінки та додає їх до списку.

Прокручування сторінок із нескінченним скролом

Деякі сайти використовують нескінченне прокручування, коли новий вміст завантажується, коли користувач прокручує сторінку вниз. Щоб скрапити такі сайти, потрібно імітувати прокручування.

Ось як імітувати прокручування за допомогою Watir:

require 'watir'
# Launch Chrome browser in headless mode
browser = Watir::Browser.new :chrome, headless: true
# Open the website
browser.goto('https://www.example.com/infinite-scroll')
# List to store product titles
product_titles = []
# Set initial scroll height
previous_height = 0
# Keep scrolling until new content stops loading
loop do
# Extract product titles
titles = browser.divs(class: 'product-title').map(&:text)
product_titles.concat(titles)
# Scroll down
browser.execute_script('window.scrollBy(0, 1000)')
sleep 2
# Get the new scroll height
new_height = browser.execute_script('return document.body.scrollHeight')
# Break if the page height hasn't changed
break if new_height == previous_height
previous_height = new_height
end
# Print the product titles
puts product_titles
# Close the browser
browser.close

Цей скрипт буде прокручувати сторінку вниз, доки висота сторінки більше не зростатиме, тобто новий вміст більше не завантажуватиметься.

Створення скриншотів за допомогою Watir

Іноді під час вебскрапінгу потрібно робити скриншоти. Watir дає змогу легко знімати весь сторінковий вміст, окремий елемент або видиму область.

Full-Page Screenshot

Щоб зробити повносторінковий знімок екрана, ви можете використати вбудований метод screenshot у Watir. Однак для повносторінкових знімків може знадобитися сторонній плагін, оскільки за замовчуванням Watir захоплює лише видиму частину сторінки.

require 'watir'
# Launch Chrome browser in headless mode
browser = Watir::Browser.new :chrome, headless: true
# Open the website
browser.goto('https://www.example.com/product/1')
# Take a full-page screenshot
browser.screenshot.save 'fullpage_screenshot.png'
# Close the browser
browser.close

Specific Element Screenshot

To capture a screenshot of a specific element, you can use Selenium’s screenshot_as method, which Watir inherits.

require 'watir'
# Launch Chrome browser in headless mode
browser = Watir::Browser.new :chrome, headless: true
# Open the website
browser.goto('https://www.example.com/product/1')
# Get the target element
element = browser.div(class: 'product-summary')
# Take a screenshot of the element
screenshot_data = element.wd.screenshot_as(:png)
# Save the screenshot
File.open('element_screenshot.png', 'wb') { |file| file.write(screenshot_data) }
# Close the browser
browser.close

Conclusion

Отже, ми розглянули вебскрапінг за допомогою Watir у Ruby. Watir — чудовий інструмент для вебскрапінгу динамічних сайтів. Він забезпечує високу гнучкість, дозволяючи виконувати такі завдання, як пагінація, прокручування та створення скриншотів. Хоча він може працювати повільніше порівняно з іншими інструментами для вебскрапінгу, його здатність взаємодіяти з сайтами, насиченими JavaScript, робить його незамінним у вашому наборі інструментів. Тепер, коли ви опанували основи, можете почати створювати власні вебскрапери для найрізноманітніших проєктів: від відстеження цін на товари до витягування даних зі сторінок із нескінченним прокручуванням.

Схожі записи