Как парсить веб-страницы с помощью Ruby
Table Of Content
- Где API ограничены, парсинг веб-страниц предлагает решение.
- 1. Сравнение и мониторинг цен
- 2. Анализ настроений в социальных сетях
- 3. Машинное обучение
- 4. Генерация потенциальных клиентов
- Почетные упоминания:
- Итак, что такое парсинг веб-страниц?
- Первые шаги
- Установка Nokogiri
- Кодирование модели для фактического выполнения парсинга веб-страниц
- Использование селекторов CSS для получения наших данных
Давайте начнем этот блог с конца... Зачем мне учиться парсить веб-страницы?
Где 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
Это сгенерирует все необходимые файлы для настройки таблицы, в которой в конечном итоге будут храниться наши данные о криптовалюте. Для этой простой демонстрации мы будем собирать только название вакансии и ссылку на страницу с дополнительной информацией. Так что модель будет выглядеть примерно так:
Наконец, мы захотим перенести нашу таблицу в базу данных с помощью
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', и мы нашли его, используя инструменты разработчика, которые, как мы помним, доступны через правый клик и инспектирование элементов на странице.
Отсюда все зависит от конкретных элементов на самой странице. В следующий раз мы рассмотрим, как все это объединить!