나는 웹 사이트를 크롤링 할 필요가있는 스크립트를 가지고있다. 모든 요청 (각 URL)마다, 나는 셀레늄/phantomJS로 새로운 웹 드라이버를 초기화한다. 이 접근 방식은 기어 오를이며 시간이 지남에 따라 CPU 사용량이 많은 비용을 부담해야? 는 차라리 단 하나의 드라이버를 생성하고 전역 변수 어딘가에 저장하고 모든 요청을 재사용해야 하는가? 이렇게하면 CPU 사용량이 줄어들거나 효과가 떨어질까요?PhantomJS의 인스턴스를 여러 개 만들거나 하나만 만들면됩니까?
1
A
답변
3
각 요청 (각 URL)마다 셀레늄/팬텀 JS로 새 웹 드라이버를 초기화합니다. 이 접근법은 확장 할 수 없으며 시간이 지남에 따라 많은 CPU 사용량이 들게됩니까?
이것은 확실히 문제입니다. PhantomJS
인스턴스는 일반적으로 CPU에서 무거 우므로 확장 할 수있는 안정적인 방법은 아닙니다. 동일한 "webdriver"인스턴스를 문제없이 또는 성능에 부정적인 영향을주지 않고 재사용 할 수 있다면 그렇게하십시오. 그렇지 않다면 브라우저 인스턴스가 실제로 실행될 수있는 다중 셀 노드가있는 Selenium grid
을 만듭니다. 또한 BrowserStack
또는 Sauce Labs
같은 원격 셀레늄 서버를 사용으로 볼 수있다.
1
PhantomJS에는 요청을 실행하고 수신 할 수있는 내장 웹 서버 (Mongoose)가 있습니다. 이렇게하면 매번 초기화 할 필요가 없습니다. 워밍업은 PhantomJS에서 상당히 비쌉니다. 여기
은 당신이 시작할 수 PhantomJS에서 샘플 웹 서버 코드 : 문서에서var port = 9494;
var server = require('webserver').create();
var page = require('webpage').create();
var your_method = function(data) {
# Do stuff here
};
service = server.listen(port, function (request, response) {
var input = JSON.parse(request.post);
page.open(url, function (status) {
page.evaluate(your_method, input)
});
if (service) {
console.log('Server running on port ' + port);
} else {
console.log('Error: Could not create web server listening on port ' + port);
phantom.exit();
}
;
이는 PhantomJS 스크립트 와 외부 세계 사이의 통신의 편의를위한 것입니다 및 일반 프로덕션 서버로 사용하지 않는 것이 좋습니다. 현재 최대 동시 요청 수는 10 개 ( )입니다. 다른 요청은 대기열에 들어갑니다.
관련 문제
- 1. 로그인 할 사용자 및 고객을위한 테이블을 만들거나 각각의 테이블을 만들면됩니까?
- 2. 정적 레이아웃을 여러 개 만들거나 데이터베이스를 만드시겠습니까?
- 3. opencart Shop의 다국어 섹션을 하나만 만들면됩니까? opencart 프로젝트에서
- 4. 동일한 개체를 여러 기능으로 여러 번 만들거나 단일 인스턴스를 사용합니까?
- 5. AppWidget 인스턴스를 하나만 업데이트합니다.
- 6. 새 인스턴스를 만들거나 공개 정적 메서드를 사용합니까?
- 7. 활동의 인스턴스를 여러 개 만드는 방법은 무엇입니까?
- 8. 입력란의 인스턴스를 여러 개 만들 수 없습니다.
- 9. iAds의 인스턴스를 여러 개 가질 수 있습니까?
- 10. 클래스의 인스턴스를 여러 개 만드는 방법은 무엇입니까?
- 11. 동일한 서버에서 셀러리 인스턴스를 여러 개 실행
- 12. 레일즈 앱의 인스턴스를 여러 개 실행하려면 어떻게해야합니까?
- 13. 클라우드에 애플리케이션 인스턴스를 여러 개 만드는 방법
- 14. 언제 SOLR 인스턴스를 여러 개 사용해야합니까?
- 15. Visual Studio의 인스턴스를 하나만 시작하면됩니까?
- 16. android에서 활동 인스턴스를 하나만 표시하는 방법은 무엇입니까?
- 17. 개체의 새 인스턴스를 만들거나 기존 인스턴스를 수정 하시겠습니까?
- 18. 프로젝트에서 Google Cloud SDK 인스턴스를 만들거나 인스턴스를 찾을 수 없습니다.
- 19. startService()는 새 Service 인스턴스를 만들거나 기존 인스턴스를 사용합니까?
- 20. 인스턴스를 만들거나 인스턴스를 만들 수없는 스크립트를 구성하는 방법
- 21. 동일한 모델의 여러 인스턴스를 여러 개 보유 할 수 있습니까?
- 22. 동일한 델파이 서비스 애플리케이션의 인스턴스를 여러 개 설치할 수 있습니까?
- 23. 고아 인스턴스를 만들거나 가짜 종속성을 추가 하시겠습니까?
- 24. 클래스의 인스턴스를 두 개 이상 동적으로 만들고
- 25. PhantomJS의 'srcset'속성
- 26. 파이썬에서 클래스의 인스턴스를 하나만 사용하는 방법
- 27. WiX msi 인스턴스를 동시에 하나만 실행할 수 있습니까?
- 28. 중첩 반복의 인스턴스를 하나만 타겟팅하는 방법은 무엇입니까?
- 29. SessionFactory 인스턴스를 하나만 생성해야하는 이유는 무엇입니까?
- 30. GregorianCalendar 인스턴스를 하나만 변경하면 다른 인스턴스도 변경됩니다.