Heim >Backend-Entwicklung >PHP-Tutorial >PHP verwendet CURL, um Multithreading zum Crawlen von Webseiten oder zum Herunterladen von Dateien zu implementieren
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( '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); ?>
Code 2: Fügen Sie den erhaltenen Code zuerst in eine Variable ein und schreiben Sie ihn dann in eine Datei
<?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); ?>
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!