2010-12-09 2 views
1

Я начинаю писать скребки для получения данных с разных сайтов. Я построил первый скребок в файле рейка, и теперь я начинаю писать второй файл рейка для получения данных со второго сайта. На данный момент я пишу скребок, специфичный для каждого интересующего меня сайта (не пытающегося создать общий скребок).Rake task for scraping with rails

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

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

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

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

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

ответ

3

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

Пример:

task :scrape do 
    Scraper.scrape! 
end 

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

describe Scraper do 
    # your tests 
end 

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

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

+0

Отлично, это очень помогает! Кажется, это маршрут, на который я должен следовать ... Только один вопрос: я бы хотел избежать использования моих моделей Scraper в папке «models» моего приложения Rails. Как создать папку для конкретных моделей Scraper (scraper.rb для общих функций, site1.rb для функций, специфичных для site1 и т. Д.), И мои задачи с граблями «видят» это? – alex 2010-12-09 19:25:36

1
  1. Конечно грабли хорошо, если вы хотите использовать его, вы можете также проверить thor, который использует более стандартный рубиново-подобный синтаксис, а не DSL рейка обеспечивает вас.

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

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