Руководство по веб-скрейпингу на Ruby с Selenium

Руководство по веб-скрейпингу на Ruby с Selenium

В этом руководстве я покажу, как настроить Selenium с Ruby, собирать данные и обрабатывать динамический контент. К концу у вас будет рабочий веб-скрейпер для сбора данных с реальных сайтов.

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

Let’s get started!

Зачем использовать Selenium для веб-скрейпинга?

Веб-скрейпинг заключается в автоматическом извлечении данных с веб-страниц. Хотя базовый скрейпинг можно выполнять с помощью библиотек вроде Nokogiri, некоторые сайты используют JavaScript для динамической загрузки контента. Традиционным скрейперам трудно извлекать данные с таких сайтов.

Именно здесь Селен помогает. Он позволяет скриптам 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:

требуется "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.для :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:
требуется "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.для :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 сделать |html_product|
name = html_product.find_element(:css, "h4").text
price = html_product.find_element(:css, "h5").text
products << Product.new(name, price)
конец
# Print extracted data
products.each { |продукт| puts "Имя: #{product.name}, Цена: #{product.price}" }
# Close the browser
driver.quit

Запустите скрипт снова:

скрейпер на Ruby.rb

Теперь в терминале должны появиться названия товаров и цены.

Шаг 4: Работа с бесконечной прокруткой

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

Доработайте скрейпер.rb:
# Scroll down to load more products
10.times сделать
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") sleep(1) # Allow time for content to load
конец
# 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:
требуется "csv"
# Save data to CSV
CSV.открыть("products.csv", "wb", write_headers: true, заголовки: ["Name", "Price"]) сделать |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
прокси = "http://72.10.160.174:22669"
options.add_argument(" - proxy-server=#{proxy}")

Это позволит направлять запросы через указанный прокси.

Шаг 7: Избегайте блокировок

Чтобы избежать блокировки:

Пример настройки 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"

Заключение

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

Теперь, когда вы освоили Selenium в Ruby, попробуйте скрейпить разные сайты и поэкспериментировать с более продвинутыми сценариями взаимодействия!

Похожие записи