ホームページ >php教程 >php手册 >PHP マルチスレッド Web ページ クローリング実装コード

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

WBOY
WBOYオリジナル
2016-06-13 12:14:39776ブラウズ

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

コード 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)
}; /

foreach ($urls as $i => $url) {
curl_multi_remove_handle($mh,$conn[$i]);
curl_close($conn[$i]); を実行します。 ;
} // クリーンアップの終了

curl_multi_close($mh);
?> コード 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();
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_RETURNTRANSFER,true); // クローリング コードをブラウザに書き込まないように設定します。文字列に変換されます
curl_multi_add_handle ($mh,$conn[$i]);

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


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