PHP는 CURL을 사용하여 웹 페이지를 크롤링하거나 파일을 다운로드하기 위한 멀티스레딩을 구현합니다.

墨辰丷
풀어 주다: 2023-03-31 13:48:01
원래의
1968명이 탐색했습니다.

PHP는 Curl을 사용하여 브라우저를 시뮬레이션하여 GET, POST 요청 등을 보내는 등 다양한 파일 전송 작업을 완료할 수 있습니다. 그러나 PHP 언어 자체는 멀티스레딩을 지원하지 않기 때문에 크롤러 프로그램 개발 효율성이 높지 않습니다. 그러나 Curl을 사용하고 Curl을 사용할 수 있습니다. 이 기능을 사용하면 여러 URL 주소에 대한 동시 멀티스레드 액세스가 가능해 웹 페이지의 동시 멀티스레드 크롤링이나 파일 다운로드가 가능합니다.

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

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

<?php 
$urls = array(  
 &#39;http://www.sina.com.cn/&#39;,  
 &#39;http://www.sohu.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.sina.com.cn/&#39;,  
 &#39;http://www.sohu.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);  
?>
로그인 후 복사

요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되길 바랍니다.

관련 권장 사항:

PDF 파일의 간단한 온라인 읽기를 구현하는 PHP

일반적인 PHP 예외 처리 방법

PHP 배열 융합의 두 가지 방법

위 내용은 PHP는 CURL을 사용하여 웹 페이지를 크롤링하거나 파일을 다운로드하기 위한 멀티스레딩을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!