ホームページ >バックエンド開発 >PHPチュートリアル >PHP は CURL を使用してマルチスレッドを実装し、Web ページをクロールしたりファイルをダウンロードしたりします

PHP は CURL を使用してマルチスレッドを実装し、Web ページをクロールしたりファイルをダウンロードしたりします

墨辰丷
墨辰丷オリジナル
2018-06-11 11:23:402005ブラウズ

PHP は Curl を使用して、ブラウザをシミュレートして GET や POST リクエストを送信するなど、さまざまなファイル転送操作を実行できます。ただし、PHP 言語自体はマルチスレッドをサポートしていないため、クローラー プログラムの開発は効率的ではありませんが、 Curl 関数を使用すると、同時マルチスレッドが複数の URL アドレスにアクセスして、Web ページの同時マルチスレッド クロールやファイルのダウンロードを実現できます。ブラウザをシミュレートして GET や POST リクエストを送信するなどの転送操作は、PHP 言語自体がマルチスレッドをサポートしていないため制限されているため、現時点ではクローラー プログラムの開発効率は高くありません。多くの場合、複数の URL アドレスへの同時マルチスレッド アクセスを実現できる Curl Multi Functions を使用する必要があります。 Curl Multi Function は非常に強力なので、Curl Multi Function を使用して同時マルチスレッド ファイル ダウンロードを作成できますか? もちろん、私のコードは以下に示されています:

コード 1: 取得したコードを File# に直接書き込みます。 ##

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

概要

: 以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。

関連する推奨事項:

PHP は PDF ファイルの簡単なオンライン読み取りを実装します

一般的な PHP 例外処理メソッド

#PHP 配列融合の 2 つの方法##

以上がPHP は CURL を使用してマルチスレッドを実装し、Web ページをクロールしたりファイルをダウンロードしたりしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。