2

Railsのerb.htmlページを、自分が作成したWebスクレイピングスクリプトの情報で更新したいのですが、新しい情報が届くたびにページを更新する必要はありません。

バックグラウンドスクリプトをどこに配置するか、railsがどのようにスクリプトを呼び出すかなどはわかりません。

どうすればよいですか?

4

1 に答える 1

2

構築に関して望ましい結果を達成する方法はいくつかありますが、最終的には、スクレイピングされたデータでページのコンテンツを更新する他の方法がないため、JavascriptとAJAX呼び出しを使用することになります。

RoRにAJAXとスクリーンスクレイピングを使用する方法は次のとおりです。

application.js

アプリケーションのJSファイルでは、フィールドが変更されたとき(ユーザーがWeb URLまたはある種のデータを入力したとき)をリッスンし、スクレイパー(後でRoutes.rbで設定されたURL)とデータはJSON形式で返され(AJAXの成功トリガーが呼び出された場合)、ループして、JSONキーのキーである値のペアと同様の形式で名前が付けられた2つのフィールドにスクレイピングされたデータを表示します。

$('#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呼び出しがscrapメソッドにアクセスする場所を認識できるようにルートを用意する必要があります。

  get "scrape/siteandnum/" => "qued_items#scrape_site_and_num"

だからあなたはそれを持っています。このメソッドを使用すると、あらゆる種類のデータを入力でき、「舞台裏」のRubyメソッドがユーザー入力を処理し、ページをリロードせずに画面スクレイピングされたデータを返します。

于 2012-06-15T00:01:47.910 に答える