Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在MVC模式的框架中,屏幕抓取模块将位于何处?_Python_Ruby On Rails_Model View Controller - Fatal编程技术网

Python 在MVC模式的框架中,屏幕抓取模块将位于何处?

Python 在MVC模式的框架中,屏幕抓取模块将位于何处?,python,ruby-on-rails,model-view-controller,Python,Ruby On Rails,Model View Controller,在MVC模式的框架中,屏幕抓取模块最合理的位置在哪里?在模型中还是在控制器中?或者它完全超出了这种模式?从某种意义上说,screen scraper是应用程序的用户——我认为它是MVC之外的一部分,与控制器交互,就像网页向控制器发送信息一样。这样,如果界面发生变化,就可以很容易地在上面放置一个网页 我想刮板只是用来收集数据的 如果对数据进行刮取和存储,则此过程不会简单地落入M V或C。您可以在定义的时间间隔内将此刮取过程作为cron作业运行,存储数据,然后定义模型以访问数据 我不建议每次控制器请

在MVC模式的框架中,屏幕抓取模块最合理的位置在哪里?在模型中还是在控制器中?或者它完全超出了这种模式?

从某种意义上说,screen scraper是应用程序的用户——我认为它是MVC之外的一部分,与控制器交互,就像网页向控制器发送信息一样。这样,如果界面发生变化,就可以很容易地在上面放置一个网页

我想刮板只是用来收集数据的

如果对数据进行刮取和存储,则此过程不会简单地落入M V或C。您可以在定义的时间间隔内将此刮取过程作为cron作业运行,存储数据,然后定义模型以访问数据

我不建议每次控制器请求模型时调用报废流程,除非您正在缓存报废请求

编辑:


cron可以是控制器,但不能公开调用。

这取决于您计划如何实现scraper。如果你要有一个用户界面,你点击一个按钮来抓取一个屏幕,那么它将在所有三个界面中(M、V和C)。如果它是一个后台进程(如前所述),那么它应该是M和C。如果您将它设计为一个模型,您可以将其称为模型。然后可以在控制器内轻松使用:

def update
  @company = Company.find(params[:id])

  @scraper = Scraper.find(:page => some_url, :method => :rip)

  @scraper.product_details.each do |params|
    @company.products.create(params)
  end
end
当您将scraper的输出格式设计为与其他对象(例如持久存储的列映射)兼容时,它总是很方便的


拥有“类似模型”的对象通常很方便。在这种情况下,您可以将scraper视为另一个网站的接口,而不是数据库,在这方面它与ActiveResource没有什么不同。没有规则规定必须使用ActiveRecord构建模型。

屏幕刮板在web应用程序中的作用是什么?刮板的作用是收集数据。