Использование первой библиотеки
Давайте попробуем установить новую библиотеку с помощью bundler и заодно научимся ее использовать.
Добавьте в ваш Gemfile новый гем с помощью:
Теперь установим нашу библиотеку с помощью команды bundle install
Отлично ! Теперь научимся ее использовать. Укажем в начале нашего .rb
файле зависимость от нашей библиотеки с помощью require "nokogiri"
Nokogiri
Nokogiri - библиотека для парсинга HTML и XML. Благодаря ней мы можем вытаскивать нужные нам куски HTML используя CSS селекторы. Чаще всего такой вид работы можно встретить на сайтах агрегаторах авиабилетов или купли/продажи. Вместо того, чтобы создавать свою базу и заполнять ее информацией порой проще взять чужой сайт, вытащить оттуда необходимое и отдать нашему пользователю.
Для того, чтобы nokogiri распарсил нам HTML, необходимо вызвать Nokogiri::HTML
и передать ему HTML в текстовом формате. Для того, чтобы получить HTML какого-либо сайта в текстовом формате можно воспользоваться библиотекой из стандартной поставки open-uri
, которая вляется надстройкой над Net::HTTP
клиентом для упрощения получения контента
В переменной doc
хранится объект документа nokogiri, который может быть частью модуля HTML5 или HTML4 или XML, в зависимости от формата, который был ему передан.
Теперь попробуем вытащить с главной страницы список главных новостей. Для начала окроем DevTools в браузере и построим CSS селектор, который будет забирать нужную нам информацию, в данном случае это будет main .mainblock .leftside .newsmain a h3
. Рассмотрим как мы его построили:
берем тег
<main>
внутри него берем бег с классом "mainblock"
внутри него берем тег с классом "leftside"
у него внутри есть тег с классом "newsmain"
оттуда достаем ссылки
<a>
и из этих ссылок достаем заголовки
<h3>
Как видим в получение нужной информации нет ничего сложного
Теперь вытаскиваем из нашего nokogiri документа эту информацию с помощью получившегося селектора:
В результате мы получаем массив, состоящий из обектов класса Element
. Для того, чтобы получить значение элемента нам необходимо вызвать у объекта метод .content
Вот так всего за пару строчек кода мы смогли вытащить из сайта ту информацию, которая нам необходима. Помимо метода .text
у элемента есть еще и такой метод как []
(вспоминаем про синтаксический сахар), который позволяем нам получать значение из атрибута. Например, чтобы получить значение класса элемента нам нужно вызвать метод в таком виде element[:class]
.
Задание html_parsing
Создайте класс Interview
с такими атрибутами как interviewee
, title
и description
:
Внизу главной страницы интерфакса вы найдете блок "интервью". необходимо его распарсить и преобразовать данные оттуда в объекты класса Interview
. Полученные массив объектов записать в файл формата JSON с названием interviews.json
.
Дополнительный материал
Last updated