CoderCastrov logo
CoderCastrov
Ruby

Эффективный парсинг с помощью Mechanize

Эффективный парсинг с помощью Mechanize
просмотров
3 мин чтение
#Ruby
Table Of Content

    Когда мне была поставлена задача разработать интерфейс командной строки (CLI) в виде гема, я рассмотрел различные практические применения. В проекте требовалось использовать парсинг веб-страниц или API, чтобы пользователь мог взаимодействовать с полученными данными на разных уровнях. В основе задачи лежало создание приложения CLI, которое позволяет пользователям получать список вариантов из внешнего источника, а затем получать больше данных, выбирая опции.

    Идея была довольно простой, и я был уверен в своей способности выполнить задачу на базовом уровне. Как преподаватель театра, и чтобы быть в знакомой области, я решил исследовать детали театральных постановок, размещенных на громоздком (но информативном) сайте BroadwayWorld.com.

    По разным причинам я решил разработать Theatre Explore, приложение CLI, которое удаляет все ненужные графические элементы и упрощает фокус на самой основной информации. В конечном итоге, Theatre Explore позволит пользователям исследовать основные детали бродвейских постановок по году или названию спектакля. Достаточно простая идея, верно?

    Сложность заключалась в установлении соответствующих объектных связей и эффективном парсинге связанных данных. Отношения между объектами было легко определить: Постановки имеют много Лет через Продукции. Однако я быстро обнаружил, что для парсинга правильных данных для любого экземпляра Продукции потребуется больше усилий, чем простая реализация с помощью Nokogiri. Для сбора необходимой информации для любого объекта мне нужно было парсить несколько страниц, вводить детали поиска и следовать определенным ссылкам.

    Чтобы создать экземпляры постановок по году, мне нужно было использовать страницу "постановки по году" на BroadwayWorld. Пользователь вводил заданный год, который направлял мой парсер на соответствующий URL для получения списка постановок этого года. А если я хотел позволить пользователям найти постановку по названию, мне нужно было направить парсер на URL, сгенерированный через поле "поиск" на основном сайте.

    Уровень взаимодействия, с которым я столкнулся, побудил меня искать углубленные учебники по единственному процессу парсинга, который я знал. Я перешел на railscasts.com и искал Nokogiri. Я посмотрел все три связанных видео и узнал, что Mechanize** **будет подходящим гемом для меня.

    Mechanize - это ruby-гем, который использует гем Nokogiri в качестве зависимости, но расширяет базовую функциональность, предоставляемую этим гемом. Некоторые дополнительные функции включают возможность "нажатия" на ссылку, заполнения веб-формы или поля поиска для парсинга данных при взаимодействии с веб-сайтом/страницей, как это может делать пользователь.

    После подключения Nokogiri и Mechanize в моем Gemfile я создал необходимые "типы" парсеров в файле класса Scraper. Эти "типы" могут обычно быть различными классами, наследующими свои базовые качества от родительского класса Scraper. Однако я решил, что такой подход будет более удобочитаемым и лаконичным, чем создание трех отдельных файлов для каждого типа парсера, который мне понадобится.

    В каждом типе парсера я установил необходимого агента Mechanize для класса, который будет получать парсингом данные.

    Код выше был бы гораздо сложнее, если бы я был ограничен использованием только Nokogiri. Вместо того, чтобы присваивать соответствующие страницы переменным экземпляра, мне бы пришлось создавать отдельные методы внутри файла только для поиска нужного источника для парсинга. С помощью Mechanize я смог присвоить нужные страницы переменным экземпляра, а затем использовать их в методе парсера "типа".

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

    Если вы похожи на меня, документация может показаться ошеломляющей. Посмотрите эти видеоуроки RailsCasts для пошагового руководства по Mechanize и Nokogiri.

    Удачного парсинга!