我想用我编写的网络抓取脚本中的信息更新 Rails 中的 erb.html 页面,但我不希望每次进入新信息时都必须刷新页面。
我不知道将后台脚本放在哪里,rails 将如何调用它等等。
我该怎么做呢?
我想用我编写的网络抓取脚本中的信息更新 Rails 中的 erb.html 页面,但我不希望每次进入新信息时都必须刷新页面。
我不知道将后台脚本放在哪里,rails 将如何调用它等等。
我该怎么做呢?
在构造方面有多种方法可以实现您想要的结果,但最终您将使用 Javascript 和 AJAX 调用,因为没有其他方法可以使用抓取的数据更新页面上的内容。
下面是我如何使用 AJAX 和屏幕抓取来实现 RoR:
应用程序.js
在我们的应用程序 JS 文件中,我们监听一个字段何时更改(用户输入一个 web url 或某种数据),然后我们对我们的爬虫进行 AJAX 调用(稍后在 Routes.rb 中设置的 url)和我们的数据以 JSON 格式返回(当调用 AJAX 的成功触发器时),我们循环并在两个字段中显示抓取的数据,这些字段以与我们的 JSON 键值对的键类似的格式命名。
$('#item_url').live('change', function() {
$.ajax({
url: "/scrape/siteandnum",
data: {item_url: document.getElementById('item_url').value},
dataType: 'json',
success: function(data) {
$.each(data, function(key, value) {
document.forms['new_qued_item'].elements['qued_item_' + key].value = value
});
}
});
});
qued_items_controller.rb
在我们的控制器中,我们有一个方法是 Ruby 抓取代码。它接收 item_url 的参数(从 AJAX 调用的数据传入)——在本例中,它接收 eBay 拍卖 URL 并为我们提供 eBay 站点域和商品编号。
def scrape_site_and_num
url = params[:item_url]
itemnumber = url.match(/\d{12}/)[0].to_i
site = url.match(/ebay.(co.uk|com|de|fr|it|ca)/)[0]
render :json => {'itemnumber' => itemnumber, 'site' => site}
end
路线.rb
当然,我们必须有一个路由,以便 AJAX 调用知道从哪里访问我们的抓取方法。
get "scrape/siteandnum/" => "qued_items#scrape_site_and_num"
所以你有它。使用此方法可以输入任何类型的数据,并且“幕后”Ruby 方法将处理用户输入并返回一些屏幕抓取的数据,而无需重新加载页面!