>  기사  >  백엔드 개발  >  PHP 다중 스레드 웹 페이지 크롤링 예제 코드

PHP 다중 스레드 웹 페이지 크롤링 예제 코드

怪我咯
怪我咯원래의
2017-07-11 14:47:321151검색

멀티스레딩(영어: multithreading)은 소프트웨어나 하드웨어에서 여러 스레드의 동시 실행을 구현하는 기술을 말합니다. 멀티스레딩 기능이 있는 컴퓨터에는 동시에 두 개 이상의 스레드를 실행할 수 있는 하드웨어 지원이 있어 전반적인 처리 성능이 향상됩니다. 이 기능을 갖춘 시스템에는 대칭형 멀티프로세서, 멀티코어 프로세서, 칩 수준 멀티스레딩 또는 동시 멀티스레딩 프로세서가 포함됩니다. [1] 프로그램에서 이러한 독립적으로 실행되는 프로그램 조각을 "스레드"라고 하며, 이를 사용하여 프로그래밍하는 개념을 "멀티스레딩"이라고 합니다. 멀티스레딩 기능이 있는 컴퓨터는 하드웨어 지원으로 인해 동시에 두 개 이상의 스레드(대만어로 "스레드")를 실행할 수 있으므로 전반적인 처리 성능이 향상됩니다. PHP는 Curl 함수를 사용하여 브라우저를 시뮬레이션하여 GET,

POST 요청

등을 보내는 등 다양한 파일 전송 작업을 완료할 수 있습니다. PHP 언어 자체가 멀티스레딩을 지원하지 않는다는 한계로 인해 크롤러 프로그램 개발 효율성은 높지 않습니다. 이때 동시 멀티스레딩 액세스를 달성할 수 있는 Curl Multi Functions를 사용해야 하는 경우가 많습니다. 여러 URL 주소로. Curl Multi Function은 매우 강력하므로 Curl Multi Functions를 사용하여 동시 멀티스레드 파일 다운로드를 작성할 수 있습니까? 물론 가능합니다. 제 코드는 다음과 같습니다:

코드 1: 얻은 코드를 파일에 직접 작성



코드 다음과 같습니다.

<?php 
$urls = array( 
&#39;http://www.php.cn/&#39;, 
&#39;http://www.baidu.com/&#39;, 
&#39;http://www.163.com/&#39; 
); // 设置要抓取的页面URL 

$save_to=&#39;/test.txt&#39;; // 把抓取的代码写入该文件 

$st = fopen($save_to,"a"); 
$mh = curl_multi_init(); 

foreach ($urls as $i => $url) { 
$conn[$i] = curl_init($url); 
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
curl_setopt($conn[$i], CURLOPT_HEADER ,0); 
curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); 
curl_setopt($conn[$i], CURLOPT_FILE,$st); // 设置将爬取的代码写入文件 
curl_multi_add_handle ($mh,$conn[$i]); 
} // 初始化 

do { 
curl_multi_exec($mh,$active); 
} while ($active); // 执行 

foreach ($urls as $i => $url) { 
curl_multi_remove_handle($mh,$conn[$i]); 
curl_close($conn[$i]); 
} // 结束清理 

curl_multi_close($mh); 
fclose($st); 
?>

코드 2: 얻은 코드를

변수

에 먼저 넣은 다음 파일
에 씁니다. 코드는 다음과 같습니다.

<?php 
$urls = array( 
&#39;http://www.php.cn/&#39;, 
&#39;http://www.baidu.com/&#39;, 
&#39;http://www.163.com/&#39; 
); 

$save_to=&#39;/test.txt&#39;; // 把抓取的代码写入该文件 
$st = fopen($save_to,"a"); 

$mh = curl_multi_init(); 
foreach ($urls as $i => $url) { 
$conn[$i] = curl_init($url); 
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
curl_setopt($conn[$i], CURLOPT_HEADER ,0); 
curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); 
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串 
curl_multi_add_handle ($mh,$conn[$i]); 
} 

do { 
curl_multi_exec($mh,$active); 
} while ($active); 

foreach ($urls as $i => $url) { 
$data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串 
fwrite($st,$data); // 将字符串写入文件。当然,也可以不写入文件,比如存入数据库 
} // 获得数据变量,并写入文件 

foreach ($urls as $i => $url) { 
curl_multi_remove_handle($mh,$conn[$i]); 
curl_close($conn[$i]); 
} 

curl_multi_close($mh); 
fclose($st); 
?>

위 내용은 PHP 다중 스레드 웹 페이지 크롤링 예제 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.