2012-05-25 3 views
2

웹 사이트에서 페이지 목록을 다운로드하는 스크립트를 작성했습니다. 때때로 다음과 같은 오류가 발생합니다 (초 수는 가변적 임).bwshare 모듈 및 PHP 스크래핑

bwshare 모듈은 다음 7 초 동안 요청을 거절합니다. 데이터를 너무 빨리 다운로드했습니다.

루프에서 sleep (2)을 사용할 때 발견되는 경우 시간 지연이 너무 비쌉니다. 이 모듈을 다루는 가장 좋은 방법은 무엇입니까? 나는 지체없이 그것을 긁어 내야하고 응답이 위의 메시지와 비슷할 경우 요청 된 초 동안 단순히 sleep을 사용합니까?

+1

예를 잡는 ~ 7 초 수면을 설정하거나 (여러 IP로) 많은 컴퓨터를 사용할 필요가 – Sergey

답변

1

모두는 오류 메시지 전에 얼마나 많은 페이지를 볼 수 있는지에 따라 다릅니다.

평균 몇 페이지를 가져오고 측정 해보십시오.

4 페이지 전에 bwshare 메시지가 최소값입니다.

오류 메시지 를 받고있는 경우 4 페이지 다운로드에 도달하기 전에, 다음 위원장은 빠른 각 다운로드 후 (2) 잠을하는 것입니다.

+0

대개 10-15 페이지 정도입니다. – user965748

+0

그렇다면 bwshare 오류 메시지가 나타나면 잠자기 (7)라고 말한 것입니다. 더 많은 성능을 얻을 수 있습니다. 그렇지 않으면, 30 페이지를 얻는 것은 단지 14 초 대신 1 분을 소비 할 것이다! –

+0

나는 이것을 막을 수 있기 때문에 cURL을 사용하여 로그인하려고 생각하고 있습니다. – user965748

0

이렇게하면 ... 도움이 될 것입니다. 다른 사람들도 혜택을 할 수 있도록

$requestTime = 0.1; // s/connection 

    foreach(/* blah */) { 
     $start = microtime(true); 
     // Do your stuff to here.. get_file_content($url) and other processing ......... 

     if($timeTaken = microtime(true)-$start < $requestTime) { 
      usleep(($requestTime-$timeTaken)*1000000); 
     } 
    } 

문제는 다음 해결되는 경우 답변을 게시하려고

+0

우리는 성능 문제에 대해 어떻게 극복했는지 알고 싶습니다 .... 그리고 수면 (n)에서 어떤 값을 사용 했습니까? –

+0

프로젝트에서 속도가 필요했기 때문에 나는 그것을 포기하고 완전히 다른 방식으로 사용하기로 결정했습니다. – user965748