Подтвердить что ты не робот

Какие хорошие рубиновые веб-сканеры?

Я смотрю, как писать свои собственные, но мне интересно, есть ли там хорошие веб-сканеры, написанные на Ruby.

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

4b9b3361

Ответ 1

Я строю wombat, Ruby DSL, чтобы сканировать веб-страницы и извлекать контент. Проверьте это на github https://github.com/felipecsl/wombat

Он все еще находится на ранней стадии, но уже функционирует с базовой функциональностью. В ближайшее время будут добавлены новые материалы.

Ответ 2

Я использовал для написания пауков, скребок страниц и анализаторов сайтов для своей работы, и все равно периодически их пишу, чтобы поцарапать некоторые зуд, которые я получаю.

У Ruby есть отличные драгоценные камни, чтобы сделать его легким:

  • Nokogiri - это мой № 1 для парсера HTML. Раньше я использовал Hpricot, но обнаружил некоторые сайты, которые заставляли его взрываться в огне. Затем я переключился на Нокигири и был очень доволен этим. Я регулярно использую его для разбора HTML, RDF/RSS/Atom и XML. Ox также выглядит интересным, так что это может быть другой кандидат, хотя я нахожу поиск DOM намного проще, чем пытаться пройти через большой хэш, например, то, что возвращается Ox.
  • OpenURI хорош как простой HTTP-клиент, но он может мешать, когда вы хотите делать более сложные вещи или необходимо сразу запустить несколько запросов. Я бы рекомендовал посмотреть HTTPclient или Typhoeus with Hydra для скромных и тяжелых заданий. Curb тоже хорошо, потому что он использует библиотеку cURL, но интерфейс не так интуитивен для меня. Это стоит посмотреть, хотя. HTTPclient также стоит посмотреть, но я склоняюсь к ранее упомянутым.

    Примечание. В OpenURI есть некоторые недостатки и уязвимости, которые могут повлиять на ничего не подозревающих программистов, так что они несколько не понравились. RestClient является очень достойным преемником.

  • Вам понадобится база данных резервного копирования и какой-то способ поговорить с ней. Это не задача для Rails как такового, но вы можете использовать ActiveRecord, отделенный от Rails, для общения с базой данных. Я сделал это пару раз, и все работает хорошо. Вместо этого мне очень нравится Sequel для моего ORM. Он очень гибкий в том, как он позволяет вам разговаривать с базой данных, используя прямой SQL для использования возможности Sequel для программной сборки запроса, моделирования базы данных и использования миграции. После того, как вы создали базу данных, вы можете использовать Rails, чтобы действовать как интерфейс для данных.
  • Если вы собираетесь перемещаться по сайтам каким-либо образом, помимо просто захватывающих страниц и следующих ссылок, вам нужно посмотреть Mechanize. Это упрощает заполнение форм и отправку страниц. В качестве дополнительного бонуса вы можете захватывать содержимое страницы как HTML-документ Nokogiri и разбирать с помощью множества трюков Nokogiri.
  • Для массирования/искажения URL-адресов мне очень нравится Addressable:: URI. Он более полнофункциональный, чем встроенный модуль URI. Единственное, что делает URI, это метод URI#extract для сканирования строки для URL-адресов. Если эта строка оказалась темой веб-страницы, это будет альтернативный способ размещения ссылок, но ее недостатком является то, что вы также получите ссылки на изображения, видео, рекламу и т.д., И вам придется фильтровать эти скорее всего, приведет к большей работе, чем если вы используете парсер и ищете теги <a>. В этом случае у Механизации также есть метод links, который возвращает все ссылки на странице, но вам все равно придется их фильтровать чтобы определить, хотите ли вы следовать или игнорировать их.
  • Если вы считаете, что вам нужно иметь дело с страницами, обрабатываемыми Javascript, или страницами, которые динамически получают свой контент из AJAX, вы должны изучить один из WATIR. Есть разные варианты для разных браузеров на разных ОС, таких как Firewatir, Safariwatir и Operawatir, поэтому вам нужно будет выяснить, что сработает для вас.
  • Вы НЕ хотите полагаться на то, чтобы ваш список URL-адресов посещал или посещал URL-адреса в памяти. Создайте схему базы данных и сохраните эту информацию. Проведите некоторое время перед проектированием схемы, думая о том, что вы хотите знать, когда вы собираете ссылки на сайте. SQLite3, MySQL и Postgres - отличный выбор, в зависимости от того, насколько большой объем вашей базы данных вам будет нужен. Один из моих анализаторов сайтов был специально разработан, чтобы помочь нам рекомендовать изменения SEO для компании из списка Fortune 50. Он работал более трех недель, охватывая около двадцати разных сайтов, прежде чем у нас было достаточно данных и остановил его. Представьте, что произошло бы, если бы у нас был выход из строя, и все эти данные попали в бит-ведро.

После всего этого вы также захотите, чтобы ваш код знал о правильном этике: Каковы основные соображения при создании веб-искателя?

Ответ 3

Итак, вам нужен хороший веб-искатель

Попробуйте spider или anemone. Оба имеют надежное использование в соответствии с количеством загрузок RubyGems.

Другие ответы, до сих пор, детализированы и полезны, но у них нет лазерного фокуса на вопрос, который запрашивает библиотеки ruby ​​для веб-браузеров . Казалось бы, это различие может запутаться: см. мой ответ на "Сканирование или веб-скребок?"

Ответ 4

Tin Man всеобъемлющий список хорош, но отчасти устарел для меня.

Большинство сайтов, с которыми работают мои клиенты, сильно зависят от AJAX/Javascript. Я использую Watir/watir-webdriver/selenium в течение нескольких лет, но накладные расходы на загрузку скрытого веб-браузера на бэкэнд, чтобы сделать этот материал DOM просто нежизнеспособным, не говоря уже о том, что все это время они по-прежнему не реализовали использование "повторного использования сеанса браузера", чтобы позволить новому исполнению кода повторно использовать старый браузер в памяти для этой цели, сбив билеты, которые в конечном итоге могли пробиться вверх по уровням API. (ссылаясь на https://code.google.com/p/selenium/issues/detail?id=18) **

https://rubygems.org/gems/phantomjs

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

** Альтернативные подходы также не удались:

Ответ 5

Если вы не хотите писать самостоятельно, используйте любой обычный веб-искатель. Там есть десятки.

Если вы хотите написать свой собственный, напишите свой собственный. Веб-искатель не совсем сложный, он состоит из:

  • Загрузка веб-сайта.
  • Поиск URL-адресов на этом веб-сайте, отфильтрованный, но вы хорошо знаете.
  • Для каждого URL-адреса на этом веб-сайте повторите шаг 1.

О, и это похоже на дубликат "веб-искателя в рубине.