2016-08-15 7 views
0

私は、MongoDBデータベースのモデル属性にデータを保存するためにCapybara/Poltergeistを使用するRuby on Railsのスクレイパーに取り組んできました。しかし、データセットは膨大で時間がかかるし、インターネット接続のような気を散らすことがあり、最初から始めなければならないこともあります。最後に残した場所からデータベースに要素を挿入し続ける方法を見つけてもらえますか?前回の退場場所からRailsアプリを続行するには?

naming.each_with_index do |namee, j| 
    @component=Compo.new 
    @component[:component]=gnamees[j] 
    @component[:partname]=Array.new 

    @session.execute_script("javascript:onSelectPart(#{namee[24..37]});") 

    sleep 2 

    @session.within_frame('content_consist') do 
     sleep 3 
     @session.within("form[name=ConsistList]") do 
      @session.all('input').each do |z| 
       @component[:partname] << z.value 
      end 
     end 

    end 

    @component.save 

    @session.driver.clear_memory_cache 
end 

として、そのような各@komponentはMongoDBの中に保存されます:私のコードの抜粋を簡素化

である私は、最新のデータベースエントリでアプリの外観をしたい、と続ける

{ "_id" : ObjectId("57ad5b7f678208560bcb21bd"), "component" : "2U-9747 - WARNING GP-WIDE VEHICLE", "partname" : [ "PLATE-MARKER WIDTH ", "BOLT ", "NYLOC NUT ", "WASHER ", "PLATE MARKER FRONT ", "PLATE MARKER FRONT ", "SCREW DRIVE PAN " ]} 

最後のものの後に新しい要素を追加します。

ありがとうございます。

+0

データをデータベースに保存する場合は、データベースに再接続して再度取得する必要があります。それはあなたが何をしているかによって異なります。あなたは本当にあなたのコードを決定するのに十分な説明をしていません。 –

+0

私は、車の部品に関する情報を含むJS重いウェブサイトを削っています。私のコードはすべての車をループし、車の部品リストを抽出し、それらをオブジェクトインスタンスとして保存します。だから、どのようにピックアップが完了していますか? – Riman

+0

1回の操作(レコードの作成など)を実行すると、データベースは有限の手順になります。アプリケーションの状態とデータベースの状態を一致させる方法は、個別化された問題です。再接続時に「ピックアップ」に苦労しているのは何ですか? –

答えて

0

私は、次の解決策が出ているため、かなり便利だと思います。私がループしてきた、それを通してモデルにブール属性:visited, default=falseを追加しました。そして各反復の終わりに私は設定しました:visited = true。 ループはClass.all each do |x|ではなくClass.where(visited=false).map do |x|でした。 したがって、前回停止した場所から続行します。

関連する問題