2014-09-07 1 views
2

phantomjs casperjs와 spooky를 사용하여 무한 스크롤을 사용하는 페이지를 긁어 내려고했습니다. 더 많은 버튼을 계속 클릭하고 새 링크를 수동으로 중지 할 때까지 결과에서 가져 오는 것으로되어 있습니다. 그러나 스크립트는 충돌 할 때까지 점점 더 많은 메모리를 사용하기 시작합니다. 나는 또한 무한 스크롤 사이트에서이 문제로 실행했습니다phantomjs/casperjs/spookyjs 메모리 사용량을 줄일 수 있습니다.

function pressMore(previousLinksLength) { 
    this.click('#projects > div.container-flex.px2 > div > a'); 
    this.wait(1000, function() { 
     links = this.evaluate(function() { 
     var projectPreview = document.querySelectorAll('.project-thumbnail a'); 
     return Array.prototype.map.call(projectPreview, function(e) { 
      return e.getAttribute('href'); 
     }); 
    }); 
     this.emit('sendScrapedLinks', links.slice(previousLinksLength)); 
    // repeat scrape function 
     pressMore.call(this, links.length); 
    }); 
} 
// spookyjs starts here 
spooky.start(scrapingUrl); 

//press the more button 
spooky.then(pressMore); 

spooky.run(); 
+0

'sendScrapedLinks' 이벤트 핸들러는 얼마나 복잡한가요? 그 외에는 더 나은 것을 할 수 없습니다. –

+0

그냥 간단한 mongoose.save() 함수입니다. – Bunker

답변

1

: 나는 다음과 같은 스크립트를 작성, 그것은 많은 메모리를 사용하지 않도록를 최적화하는 방법이있다. 나는 메모리 누수를 결코 발견 할 수 없었다.

간단히 말해서 내가 한 일은 스크롤을 사용하는 것입니다. 본질적으로 나는 잠시 동안 앱을 실행하여 마지막으로 스크롤하여 위치를 기록한 다음 로그 된 값을 사용하여 메모리를 다시 차지하지 못하게하여 앱을 다시 시작합니다. 점점 많은 사이트를로드하기 위해 특정 위치로 순차적으로 스크롤해야하기 때문에 고통입니다. 마지막으로 스크롤 한 위치를 위로 나눌 위치를 찾는 것이 어려울 수 있습니다.

+0

어떻게 도움이됩니까? 크래시가 발생하기 전에 마지막 스크롤 위치를 알고 있다고해서 두 번째 시도를 계속한다는 의미는 아닙니다. –