PHP マルチスレッド Web ページ クローリングの実装コード_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:35:58
オリジナル
790 人が閲覧しました

PHP 言語自体がマルチスレッドをサポートしていないため、クローラ プログラムの開発効率は高くありません。多くの場合、複数のファイルへの同時マルチスレッド アクセスを実現できる Curl Multi Functions を使用する必要があります。 URL アドレス。 Curl Multi Function は非常に強力なので、Curl Multi Function を使用して同時マルチスレッド ファイル ダウンロードを記述することはできますか? もちろん、それは可能です。私のコードを以下に示します:

コード 1: 取得したコードをファイルに直接書き込みます

コードをコピーします コードは次のとおりです:

$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 (互換性; 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])
} // クリーンアップを終了
fclose($st); ?>


コード 2: 取得したコードを変数に入れてからファイルに書き込みます


コードをコピーします
コードは次のとおりです: $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(); i => $url) {
$conn[$i] =curl_init($url);
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 6.0)") ;
curl_setopt($conn[$i], CURLOPT_HEADER ,0);
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true);ブラウザにクローリング コードを書き込みますが、文字列に変換されます
curl_multi_add_handle ($mh,$conn[$i])
}

do {
curl_multi_exec($mh,$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($st);



http://www.bkjia.com/PHPjc/322228.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/322228.html

技術記事
PHP 言語自体がマルチスレッドをサポートしていないため、クローラ プログラムの開発効率は高くありません。多くの場合、複数のファイルへの同時マルチスレッド アクセスを実現できる Curl Multi Functions を使用する必要があります。 ...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート