PHPはCurl関数を使用して、ブラウザをシミュレートしてGET、POSTリクエストを送信するなど、さまざまなファイル転送操作を完了します。ただし、PHP言語自体はサポートしていませんマルチスレッドであるため、クローラ プログラムの開発効率は高くありません。現時点では、複数の URL アドレスへの同時マルチスレッド アクセスを実現できる Curl Multi Functions を使用する必要があることがよくあります。 Curl Multi Function は非常に強力なので、Curl Multi Function を使用して同時マルチスレッド ファイル ダウンロードを作成できますか? もちろん、それは可能です。
コード1: 取得したコードをファイルに直接書き込む?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
$urls = 配列( 「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]); } // 初期化
する{ 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); ?>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
$urls = 配列( 「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]); }
する{ 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); ?> |
以上がこの記事の全内容ですが、皆さんに気に入っていただければ幸いです。