IM은 IMDB에서 데이터를 긁어 내려고했지만 자연스럽게 많은 페이지가 있으며 직렬 방식으로 처리하는 것은 너무 오래 걸립니다. 심지어 내가 멀티 스레드 CURL 않습니다.웹 사이트 (PHP)에서 데이터를 가져 오는 가장 효율적인 방법은 무엇입니까?
더 빠른 방법이 있습니까?
예 IMDb는 텍스트 파일을 제공하지만 모든 것을 정상적으로 제공하지는 않습니다.
IM은 IMDB에서 데이터를 긁어 내려고했지만 자연스럽게 많은 페이지가 있으며 직렬 방식으로 처리하는 것은 너무 오래 걸립니다. 심지어 내가 멀티 스레드 CURL 않습니다.웹 사이트 (PHP)에서 데이터를 가져 오는 가장 효율적인 방법은 무엇입니까?
더 빠른 방법이 있습니까?
예 IMDb는 텍스트 파일을 제공하지만 모든 것을 정상적으로 제공하지는 않습니다.
나는 PHP로 무차별 대청소를 많이했고 순차적 인 처리가 잘된 것처럼 보입니다. 나는 당신에게 "오랜 세월"을 확신하지 못한다. 그러나 나는 긁는 동안 다른 것들을 자주한다.
일반적으로 실시간으로 내 근근이 살아가는 것에 의존하는 것은 없으며, 그 데이터는 중요한 것으로서 나는 보통 그것을 긁어내어 동시에 마사지합니다.
다른 경우 사이트를 풀다가 로컬로 저장하는 데는 간소한 wget 명령을 사용합니다. 그런 다음 일부 정규식 매직으로 PHP 스크립트를 추출하여 데이터를 추출하십시오.
PHP에서 curl_ *을 사용하고있어 매우 효과적입니다.
부모 프로세스는 하위 프로세스에서 URL을 제공하여 프로세스하고 데이터를 로컬로 (db, fs 등) 저장하도록 설정할 수 있습니다. 부모는 동일한 URL이 두 번 처리되지 않고 자식이 응답하지 않도록해야합니다.
리눅스 (pcntl_, 포크 등)에서 쉽게 할 수 있으며, 윈도우 박스에서는 더 어렵습니다.
콘텐츠를 변경하지 않았거나 이미 갖고있는 경우 마지막 수정 시간과 (이전에 저장 한) 일부 논리를 추가하여 페이지 스크랩을 건너 뛸 수 있습니다. 아마 당신이 할 수있는 것처럼 최적화 트릭이 잔뜩 있습니다.
curl_multi_add_handle 및 curl_multi_select에서 cURL을 올바르게 사용하는 경우 수행 할 수있는 일이 많지 않습니다. 테스트를 통해 시스템에서 처리 할 최적의 핸들 수를 찾을 수 있습니다. 대역폭이 너무 적 으면 대역폭을 너무 많이 사용하지 않고 핸들을 전환하는 데 너무 많은 시간을 낭비하게됩니다.
master-worker 다중 프로세스 패턴을 사용하면 많은 스크립트 인스턴스가 cURL을 사용하여 페치하고 나중에 페이지 블록을 처리하여 각각 병렬로 실행되도록 할 수 있습니다. http://gearman.org/?id=gearman_php_extension과 같은 프레임 워크는 우아한 솔루션을 만드는 데 도움이되지만 Unix에서 프로세스 제어 기능을 사용하거나 백그라운드에서 스크립트를 호출하는 것 (시스템 쉘 또는 비 차단 HTTP를 통해)도 잘 작동 할 수 있습니다.
옙은 나에게 가장 좋은 옵션과 같은 소리를 내고 있습니다. – Tim