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