Грабли для соскоба с рельсов - PullRequest
2 голосов
/ 09 декабря 2010

Я начинаю писать скребки для получения данных с разных сайтов. Я построил первый скребок в файле rake и теперь начинаю писать второй файл rake для получения данных со второго сайта. Сейчас я пишу скребок для каждого интересующего меня сайта (не пытаясь создать универсальный скребок).

У меня есть 3 вопроса:

  1. Является ли написание рейковых заданий хорошим выбором для меня? Есть ли альтернативы, которые я должен рассмотреть?

  2. Как я могу добавить функции / методы в мои файлы rake? (извините, очень глупые вопросы, но я не могу понять, как структурировать мой код ... так что сейчас это всего лишь 500 строк непрерывного кода в длинном методе), например, я хотел бы получить "get_description (section) msgstr "метод, который возвращает описание со страницы. Метод может отличаться в зависимости от того, какой сайт я очищаю.

  3. Как я могу проверить свою задачу с помощью RSpec? Я хотел бы дать ссылку и убедиться, что результат моих задач соответствует ожидаемому для меня

Спасибо за вашу помощь!

Ответы [ 2 ]

3 голосов
/ 09 декабря 2010

Как правило, рейк-задачи должны быть очень минимальными. Отнесите фактическое поведение к реальным классам. Эти классы могут быть легко протестированы.

Пример:

task :scrape do
  Scraper.scrape!
end

class Scraper
   def self.scrape!
     # do something
   end
end

describe Scraper do
  # your tests
end

Вы могли бы, как указал @brad, использовать тор, который сам по себе имеет регулярную структуру классов, поэтому в теории должно быть проще тестировать сами задачи. Я этого еще не сделал.

Вы можете определить методы в граблях, но я не знаю, где они заканчиваются. Ты не должен этого делать, так что не беспокойся. Сохраняйте тела задач минимальными, пишите нормальный код для грязной работы.

1 голос
/ 09 декабря 2010
  1. Конечно, с рейком все в порядке, если вы хотите его использовать, вы также можете проверить thor , который использует более стандартный рубиноподобный синтаксис, а не dsl rake.

  2. Rake - это просто еще одна библиотека ruby, поэтому вы можете включить туда все, что захотите.Таким образом, вы можете написать свою собственную библиотеку и загрузить ее в свой файл rake.Посмотрите, как, например, Bundler делает это .Они только что определили свои собственные классы, а затем создали задачи внутри него.Он использует, кстати, то, что из того, что я могу собрать, как-то прокси для этих задач на грабли, на самом деле не просматривало его полностью, хотя я могу ошибаться.

  3. Есливы определяете вещи в своей собственной библиотеке, просто используйте rspec, как обычно для любого другого проекта, затем подключите эту библиотеку к граблям или тор любым другим способом, и вы отправитесь в гонку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...