Rails Insights

Парсинг HTML з Ruby: Простий посібник

Парсинг HTML може бути корисним для багатьох завдань, таких як витягування даних з веб-сторінок, автоматизація збору інформації або навіть створення веб-скреперів. У цій статті ми розглянемо, як парсити HTML за допомогою мови програмування Ruby. Ми будемо використовувати бібліотеку Nokogiri, яка є однією з найпопулярніших для роботи з HTML та XML у Ruby.

Що таке Nokogiri?

Nokogiri — це потужна бібліотека для парсингу HTML та XML, яка дозволяє легко маніпулювати документами, витягувати дані та виконувати запити. Вона підтримує CSS-селектори та XPath, що робить її дуже гнучкою та зручною у використанні.

Встановлення Nokogiri

Щоб почати використовувати Nokogiri, спочатку потрібно встановити цю бібліотеку. Ви можете зробити це за допомогою Bundler або безпосередньо через RubyGems. Ось як це зробити:

# Додайте до вашого Gemfile
gem 'nokogiri'

# Або встановіть безпосередньо
gem install nokogiri

Основи парсингу HTML

Тепер, коли у вас встановлена бібліотека, давайте розглянемо, як парсити HTML-документ. Для цього ми спочатку завантажимо HTML-код, а потім використаємо Nokogiri для його парсингу.

Завантаження HTML

Ми можемо завантажити HTML-код з веб-сторінки за допомогою стандартної бібліотеки Ruby `open-uri`. Ось приклад:

require 'open-uri'
require 'nokogiri'

url = 'https://example.com'
html_content = URI.open(url).read

Парсинг HTML

Тепер, коли ми маємо HTML-код, давайте парсити його за допомогою Nokogiri:

doc = Nokogiri::HTML(html_content)

Тепер ми можемо використовувати методи Nokogiri для витягування даних з документа.

Витягування даних з HTML

Однією з основних функцій парсингу є можливість витягувати дані з HTML-документів. Давайте розглянемо кілька прикладів.

Витягування заголовків

Припустимо, ми хочемо витягнути всі заголовки (h1, h2, h3) з веб-сторінки. Ось як це можна зробити:

headers = doc.css('h1, h2, h3')
headers.each do |header|
  puts header.text
end

Витягування посилань

Витягування всіх посилань з веб-сторінки також є поширеним завданням. Ось як це зробити:

links = doc.css('a')
links.each do |link|
  puts link['href']
end

Витягування тексту з конкретного елемента

Якщо ви знаєте, який конкретний елемент вам потрібен, ви можете витягнути текст з нього, використовуючи CSS-селектори:

specific_element = doc.at_css('.specific-class')
puts specific_element.text if specific_element

Використання XPath для парсингу

Nokogiri також підтримує XPath, що дозволяє виконувати більш складні запити. Ось приклад використання XPath для витягування всіх абзаців з документа:

paragraphs = doc.xpath('//p')
paragraphs.each do |paragraph|
  puts paragraph.text
end

Обробка помилок

При парсингу HTML важливо обробляти можливі помилки. Наприклад, якщо веб-сторінка недоступна або HTML-код не відповідає очікуваному формату, ваш код може зламатися. Ось як можна обробити помилки:

begin
  html_content = URI.open(url).read
  doc = Nokogiri::HTML(html_content)
rescue OpenURI::HTTPError => e
  puts "Помилка при завантаженні: #{e.message}"
rescue StandardError => e
  puts "Сталася помилка: #{e.message}"
end

Приклади використання

Давайте розглянемо кілька практичних прикладів, які демонструють, як можна використовувати парсинг HTML з Ruby.

Приклад 1: Витягування заголовків новин

Припустимо, ви хочете витягнути заголовки новин з веб-сайту новин. Ось як це можна зробити:

require 'open-uri'
require 'nokogiri'

url = 'https://news.ycombinator.com/'
html_content = URI.open(url).read
doc = Nokogiri::HTML(html_content)

titles = doc.css('.storylink')
titles.each do |title|
  puts title.text
end

Приклад 2: Збір даних з таблиці

Якщо ви хочете витягнути дані з таблиці на веб-сторінці, ось як це можна зробити:

url = 'https://example.com/table'
html_content = URI.open(url).read
doc = Nokogiri::HTML(html_content)

rows = doc.css('table tr')
rows.each do |row|
  cells = row.css('td')
  cells.each do |cell|
    print "#{cell.text}\t"
  end
  puts
end

Висновок

Парсинг HTML з Ruby за допомогою Nokogiri — це потужний інструмент для збору та обробки даних з веб-сторінок. Завдяки простоті використання та гнучкості, ви можете легко витягувати потрібну інформацію та автоматизувати багато завдань. Сподіваємося, що цей посібник допоможе вам розпочати роботу з парсингом HTML у Ruby!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.