Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet CURL, um Multithreading zum Crawlen von Webseiten oder zum Herunterladen von Dateien zu implementieren

PHP verwendet CURL, um Multithreading zum Crawlen von Webseiten oder zum Herunterladen von Dateien zu implementieren

墨辰丷
墨辰丷Original
2018-06-11 11:23:401961Durchsuche

PHP kann Curl verwenden, um verschiedene Dateiübertragungsvorgänge durchzuführen, z. B. die Simulation eines Browsers zum Senden von GET-, POST-Anfragen usw. Da die PHP-Sprache selbst jedoch kein Multithreading unterstützt, ist die Entwicklung von Crawler-Programmen nicht effizient Sie können Curl verwenden, um gleichzeitigen Multithread-Zugriff auf mehrere URL-Adressen zu erreichen, um gleichzeitiges Multithread-Crawling von Webseiten oder das Herunterladen von Dateien zu erreichen.

PHP kann Curl-Funktionen verwenden, um verschiedene Dateiübertragungsvorgänge durchzuführen B. die Simulation eines Browsers zum Senden von GET-, POST-Anfragen usw., sind durch die Tatsache eingeschränkt, dass die PHP-Sprache selbst kein Multithreading unterstützt, sodass die Effizienz bei der Entwicklung von Crawler-Programmen derzeit häufig nicht hoch ist um Curl-Multifunktionen zu verwenden, mit denen gleichzeitiger Multithread-Zugriff auf mehrere URL-Adressen erreicht werden kann. Da Curl Multi Function so leistungsstark ist, kann Curl Multi Functions zum Schreiben gleichzeitiger Multithread-Dateidownloads verwendet werden? Natürlich ist mein Code unten angegeben:

Code 1: Schreiben Sie den erhaltenen Code direkt in eine Datei

<?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); 
?>

Code 2: Fügen Sie den erhaltenen Code zuerst in eine Variable ein und schreiben Sie ihn dann in eine Datei

<?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);  
?>

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass es für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

PHP implementiert einfaches Online-Lesen von PDF-Dateien

Gemeinsame PHP-Ausnahmebehandlungsmethoden

Zwei Methoden der PHP-Array-Fusion

Das obige ist der detaillierte Inhalt vonPHP verwendet CURL, um Multithreading zum Crawlen von Webseiten oder zum Herunterladen von Dateien zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn