Capybara - это фреймворк для приемочного тестирования веб-приложений. Вы можете смоделировать реального пользователя и протестировать свое веб-приложение. Вы можете заполнять поля, отправлять формы, выполнять пользовательский javascript в текущем сеансе и так далее. По сути, вы можете делать буквально все, что может делать настоящий пользователь с помощью выбранного им браузера.

Сегодня мы собираемся использовать Capybara для другой цели, для очистки. Некоторые основные поисковые системы уже использовали этот подход для сканирования веб-страниц. Например, Google может сканировать динамически загружаемое содержимое, используя настоящий веб-браузер Google Chrome. Давайте посмотрим, как это делается, а это мой любимый способ обучения. Ага!

Перед началом нам нужно установить необходимые драгоценные камни и инструменты. Я использую Linux Mint. Процесс установки может отличаться для других операционных систем, поэтому будьте осторожны. Давайте установим следующие рубиновые камни.

gem install selenium-webdriver
gem install nokogiri
gem install capybara

Перед написанием скрипта парсинга нам понадобится еще один инструмент, ChromeDriver. Щелкните следующую ссылку, чтобы загрузить ChromeDriver.

Https://chromedriver.storage.googleapis.com/index.html

Последняя версия ChromeDrive - 2.28, поэтому я собираюсь использовать эту версию. Но это изменится в будущем. Убедитесь, что вы используете последнюю версию, или не используйте ее. Что бы вам ни было удобно :).

Вы увидите список файлов ChromeDrive, показанный на изображении выше. Пожалуйста, скачайте соответствующую версию. (Я загрузил chromedriver_linux64.zip.) После распаковки zip-файла вы получите двоичный файл под названием chromedriver. Вам нужно скопировать этот файл в свой $ PATH. Вы можете, например, скопировать этот файл в / usr / bin, / usr / local / bin или / bin.

И наконец, что не менее важно, я настоятельно рекомендую вам установить pry. Это альтернативная irb консоль разработчика во время выполнения. И это просто идеально, мне это нравится.

gem install pry

После процесса установки мы можем приступить к программированию. Запустите консоль разработчика pry среды выполнения, набрав pry на консоли.

pry

Настроим Capybara.

После их ввода в консоли разработчика появится браузер Chrome. А теперь мы будем управлять этим браузером с помощью ruby.

Давайте посетим веб-страницу со следующей строкой кода.

browser.visit "https://angel.co/companies"

Вы увидите, что ваш браузер зайдет на Angel.Co. Это только начало. Мы сделаем гораздо больше.

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

Таким образом, следующая строка щелкает панель поиска, и появляется поле поиска.

browser.find('.search-box').click

Затем мы можем ввести слово. Я наберу тест для этой статьи, вы можете вводить все, что хотите. Следующая строка кода сначала найдет поле ввода с классом .keyword-input и установит для него значение test.

browser.find('.keyword-input').set("test")

Затем нам нужно нажать Enter, чтобы запустить процесс поиска. Следующая строка сделает это за нас. И обратите внимание, как изменится страница.

browser.find('.keyword-input').native.send_keys(:return)

Вот совет. Когда вы нажимаете клавишу ВВОД, запускается запрос AJAX, который может занять некоторое время. Так что нужно дождаться готовности страницы. Мы будем использовать javascript, чтобы определить, полностью ли загружена страница.

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

Если вы все сделаете правильно, вы получите экран, показанный выше. Вуаля.

Капибара - отличный инструмент, но одного его недостаточно для соскабливания. Нам нужно совместить это с Нокогири. Вы можете получить исходный код текущего сеанса с помощью следующей строки. И, конечно же, если у вас есть действующий HTML-код, вы можете легко изменить его с помощью Nokogiri.

doc = Nokogiri::HTML(driver.page_source);

Следующий блок кода сканирует страницу и выбирает компании. После этого он нажимает кнопку «Еще», чтобы загрузить больше из них.

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