【发布时间】:2015-09-27 22:33:52
【问题描述】:
我有这个从网站上抓取数据的 rake 文件。当这个脚本抓取数据时,我正在使用 rake-progressbar gem 来跟踪它的进度。但是,现在我只能在终端中看到进度,并且只有在终端中输入“rake testing2”来运行 rake 文件。
我现在想要的是当我单击触发我的 rake 文件的链接时能够在浏览器中看到进度。
这是我的主页视图,其中包含触发 rake 文件(testing2.rake)的链接:
<div>
<p>Find me in app/views/home/index.html.erb</p>
<h3>Scrape data:</h3>
<%= link_to "Scrape",:action => 'scrape' %>
</div>
这是我的家庭控制器:
class HomeController < ApplicationController
def index
end
def scrape
%x[rake testing2]
redirect_to root_url
end
end
这是我的 rake 文件(testing2.rake),其中包含抓取数据的代码以及进度条的代码:
require 'mechanize'
require 'date'
require 'json'
require 'rake-progressbar'
task :testing2 => [:environment] do
agent = Mechanize.new
last_page_number = 1
for pg_number in 1..last_page_number do
puts "Scrapping..."
page = agent.get("https://www.congress.gov/members?page=#{pg_number}")
page_links = page.links_with(href: %r{.*/member/\w+})
page_links_size = page_links.size
member_links = page_links
bar = RakeProgressbar.new(100)
members = member_links.map do |link|
member = link.click
name = member.search('title').text.split('|')[0]
institution = member.search('td~ td+ td').text.split(':')[0]
stripActivities = activities.reject { |x| x.length == 1 }
{
name: name.strip,
institution: institution.strip
}
bar.inc
end
bar.finished
end
end
下面是终端中的输出,进度条显示:
那么,我怎样才能在浏览器上显示这个进度呢?
【问题讨论】:
-
您想从浏览器运行 rake 任务吗?从安全角度来看,这似乎是个坏主意。
-
@pguardiario 哦?我不知道,但在这个应用程序中安全并不重要。无论如何,如果不是 rake 任务,你能告诉我在哪里更适合将我的 testing2.rake 代码放在我的 rails 应用程序中吗?因为我有不同的代码来抓取不同的网站,除了这个任务文件夹之外,我现在想不出任何其他地方可以放置它们
-
如果它用于在浏览器中显示,它通常会显示在视图中,但在您的情况下可能没有意义。
标签: ruby-on-rails ruby web-scraping progress-bar mechanize