Анемон с Rails и MongoDB
Я готовлюсь написать свой первый веб-сканер, и похоже, что Anemone имеет больше смысла. Существует встроенная поддержка хранилища MongoDB, и я уже использую MongoDB через Mongoid в своем приложении Rails. Моя цель - сохранить просканированные результаты, а затем получить к ним доступ через Rails. У меня есть пара проблем:
1) В конце этой страницы написано, что "Примечание. Каждый механизм хранения очистит существующие данные Anemone перед началом нового сканирования". Я ожидал бы, что это произойдет в конце сканирования, если я буду использовать хранилище памяти по умолчанию, но не следует ли сохранять записи в MongoDB неопределенно долго, чтобы дублированные страницы не сканировались при следующем запуске задачи? Если они будут стерты "перед началом нового сканирования", то мне следует просто запустить свою логику Rails до следующего сканирования? Если это так, то мне придется проверять дубликаты записей из предыдущего сканирования.
2) Я впервые задумался об использовании MongoDB вне контекста моделей Rails. Похоже, записи создаются с использованием Page
класс, так что я могу позже просто запросить их, как обычно, используя Mongoid? Я полагаю, это просто считается "моделью", если в ней есть ORM, предоставляющий необычные методы?
1 ответ
Великолепные вопросы.
1) Это зависит от вашей цели.
В большинстве случаев это значение по умолчанию имеет смысл. Один выполняет ползание с анемоном и анализирует данные.
Когда вы выполняете новый обход, старые данные должны быть удалены, чтобы данные из нового обхода могли заменить его.
Если вы не хотите, чтобы это происходило, вы можете указать движку хранилища новую коллекцию перед началом нового сканирования.
2) Mongoid не будет создавать классы моделей для вас.
Вам нужно определить модели, чтобы mongoid знал, как создать класс для коллекции, и при желании определить поля, которые есть у каждого документа, чтобы вы могли использовать .
метод доступа из коробки.
Что-то вроде:
class Page
include Mongoid::Document
field :url, type: String #i'm guessing, check what kind of docs anemone produces
field :aliases, type: Array
field ....
end
Вероятно, потребуется включить следующие поля:
- url - URL страницы
- aliases - другие URL-адреса, перенаправляемые на эту страницу, или страницу, перенаправляемую на заголовки - полные заголовки HTTP-ответа
- код - код ответа HTTP (например, 200, 301, 404)
- тело - необработанное тело ответа HTTP
- doc - A Nokogiri::HTML:: Документ тела страницы (если применимо)
- ссылки - Массив всех URL-адресов, найденных на странице, которые указывают на один и тот же домен
Но, пожалуйста, просто посмотрите, какой тип (строка, массив и т. Д.) Механизм хранения хранит их, и не делайте предположений.
Удачи!