CoderCastrov logo
CoderCastrov
Nokogiri

Как парсить веб-страницы с помощью Ruby

Как парсить веб-страницы с помощью Ruby
просмотров
4 мин чтение
#Nokogiri

Давайте начнем этот блог с конца... Зачем мне учиться парсить веб-страницы?


Где API ограничены, парсинг веб-страниц предлагает решение.

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

Возможно, вы задаетесь вопросом, какие могут быть примеры использования. Вот список некоторых наиболее распространенных задач, которые можно решить с помощью Ruby и Nokogiri:

1. Сравнение и мониторинг цен

Цены меняются ежедневно, и сделки различаются. Некоторые компании размещают свои товары на нескольких платформах, и парсинг обеих может помочь вам провести сделку в реальном времени в качестве посредника.

2. Анализ настроений в социальных сетях

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

Дополнительную информацию о Twitter API можно найти здесь https://developer.twitter.com/en

3. Машинное обучение

Агрегирование больших объемов данных может помочь моделям машинного обучения развиваться и улучшаться.

4. Генерация потенциальных клиентов

Программное обеспечение для веб-парсинга, разработанное этичным способом, например, из списка предприятий Google или Yellow Pages, может помочь собирать информацию, такую как электронные адреса и телефонные номера для связи.

Почетные упоминания:

Коэффициенты спортивных ставокЦены на отелиЦены на путешествияНедвижимость

Итак, что такое парсинг веб-страниц?

Когда-нибудь задумывались о том, почему определенная веб-страница выглядит так, как она выглядит? Существует инструмент, используемый разработчиками, чтобы метафорически "открыть капот" и посмотреть на HTML и другие внутренние работы веб-сайта. Это началось с инструментов разработчика браузера Firefox, а вскоре все остальные браузеры предложили свою версию.

Вы можете выбрать любой сайт, но для нашего примера я решил перейти на https://cryptocurrencyjobs.co/ и посмотреть, что находится под капотом. Щелкните левой кнопкой мыши на странице и прокрутите вниз до "inspect" (проверить), чтобы открылось новое окно справа.

На самом деле, то, что вы видите в инструментах разработчика, является HTML-представлением того, что отображается слева, то есть на веб-сайте. Теперь, если вы щелкнете на значок стрелки в левом верхнем углу инструментов разработчика, вы сможете указать на любой элемент на странице и узнать, где именно этот элемент находится в HTML-документе, который мы будем называть Doc. Это ключевой момент для понимания того, как эффективно парсить веб-сайт, поскольку некоторые элементы могут быть вложены глубоко внутри элементов в Doc.

Из любопытства и для целей демонстрации в этом блоге следующие части будут попыткой использования Ruby on Rails для создания базы данных, которая будет заполняться с помощью парсинга вакансий, доступных в сфере криптовалюты.

Первые шаги

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

Создание API

rails new crypto_jobs --api

Генерация модели для таблицы данных, которые мы собираемся получить с веб-сайта, который мы будем парсить

rails g model Crypto

Это сгенерирует все необходимые файлы для настройки таблицы, в которой в конечном итоге будут храниться наши данные о криптовалюте. Для этой простой демонстрации мы будем собирать только название вакансии и ссылку на страницу с дополнительной информацией. Так что модель будет выглядеть примерно так:

Создано с использованием VS Code

Наконец, мы захотим перенести нашу таблицу в базу данных с помощью

rails db:migrate

Установка Nokogiri

Теперь, когда у нас настроена база данных, нам нужно добавить Nokogiri в наш Gemfile, чтобы воспользоваться его возможностями.

Кодирование модели для фактического выполнения парсинга веб-страниц

Теперь, когда мы настроены, давайте вернемся к нашему классу app/models и приступим к интересной части! Нам нужно, чтобы наш код мог делать несколько вещей, поэтому давайте разберем его.

Чтобы иметь возможность перемещаться по вебу и собирать такую ​​информацию, нам понадобятся несколько вещей в начале нашей модели. Создайте и перейдите в app/models/scraper.rb. В верхней части страницы добавьте следующее:

require ‘nokogiri’ require ‘open-uri’ require ‘pry’

Open-uri позволяет нам открывать веб-сайты и сохранять их как HTML-контент, который мы затем будем использовать совместно с Nokogiri, чтобы превратить его во вложенные узлы, которыми мы сможем перемещаться и извлекать информацию. Наконец, мы добавим привязку pry, чтобы мы могли запустить парсер и войти в наш терминал и увидеть возвращаемые значения.

Запустите -> ruby/app/models/scraper.rb

Отсюда мы можем увидеть значение нашей переменной doc

До этого момента все, что мы делали, является стандартным для настройки любого приложения парсинга веб-страниц с использованием Ruby и Nokogiri. У нас есть значения во вложенном узле, и теперь дело только за идентификацией и итерацией через них.

Использование селекторов CSS для получения наших данных

После рефакторинга нашего кода мы можем создать переменную, которая ищет элементы CSS с помощью селектора. В нашем случае мы ищем класс с названием 'ais-Hits-item', и мы нашли его, используя инструменты разработчика, которые, как мы помним, доступны через правый клик и инспектирование элементов на странице.

Отсюда все зависит от конкретных элементов на самой странице. В следующий раз мы рассмотрим, как все это объединить!