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( 'http://www.sina.com.cn/', 'http://www.sohu.com/', 'http://www.163.com/' ); // 设置要抓取的页面URL $save_to='/test.txt'; // 把抓取的代码写入该文件 $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( 'http://www.sina.com.cn/', 'http://www.sohu.com/', 'http://www.163.com/' ); $save_to='/test.txt'; // 把抓取的代码写入该文件 $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는 CURL을 사용하여 웹 페이지를 크롤링하거나 파일을 다운로드하기 위한 멀티스레딩을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!