2016-08-15 2 views
0

저는 Capybara/Poltergeist를 사용하여 MongoDB 데이터베이스의 모델 속성에 데이터를 저장하는 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

단일 작업 (예 : 레코드 작성)을 수행하면 데이터베이스가 한정된 단계로 진행됩니다. 응용 프로그램 상태를 데이터베이스 상태와 어떻게 일치 시킬지는 개별적인 문제입니다. 재 연결시 어려움을 정확히 겪고 있습니까? –

답변

0

나는 다음과 같은 해결책을왔다 꽤 유용하다 생각 : 나는 반복되고이를 통해 모델에 부울 속성 :visited, default=false을 추가했다. 각 반복의 끝에서 나는 visited = true를 설정했습니다. 내 루프는 Class.all each do |x|이 아니고 Class.where(visited=false).map do |x|입니다. 따라서 마지막으로 멈춘 곳에서 계속됩니다.

관련 문제