ホームページ  >  記事  >  バックエンド開発  >  PHP は、curl マルチスレッドを使用して Web ページをクロールする機能を実装します。

PHP は、curl マルチスレッドを使用して Web ページをクロールする機能を実装します。

小云云
小云云オリジナル
2018-03-27 10:16:271420ブラウズ

この記事では主に、PHP が CURL マルチスレッドを使用して Web ページをクロールする方法について説明します。CURL はマルチスレッド Web クローリングをサポートします。コード例は次のとおりです。皆さんのお役に立てれば幸いです。

class HttpMulti {
    //curl选项
    private static $options = array(
        CURLOPT_SSL_VERIFYPEER => 0,   //不开启HTTPS请求
        CURLOPT_RETURNTRANSFER => 1,  //请求信息以文件流方式返回
        CURLOPT_CONNECTTIMEOUT => 10,  //连接超时时间 默认为10s
        CURLOPT_TIMEOUT => 20,   //设置curl执行最大时间
        CURLOPT_ENCODING => "gzip", //HTTP请求头中"Accept-Encoding"的值,为空发送所有支持的编码类型
        CURLOPT_HEADER => 0, //设置为true,请求返回的文件流中就会包含response header
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
		CURLOPT_POST => FALSE,   //默认选择GET的方式发送
	);
	public static function multiRun($urlData=array()){
        if(empty($urlData)) return;
        $data = $curls = array();
        $mh = curl_multi_init();
        foreach($urlData as $k=>$val){
			$ch = curl_init($val);
            curl_setopt_array($ch, self::$options);
            curl_multi_add_handle($mh, $ch);
			$curls[$k] = $ch;
		}
		// 执行批处理句柄
        self::execMultiHandle($mh);
        if($curls){
            foreach($curls as $_k=>$v){
				//获得返回信息
                $data[$_k] = curl_multi_getcontent($v);
                curl_close($v);
                curl_multi_remove_handle($mh, $v);
                curl_multi_close($mh);
            }
        }
        return $data;
    }
	static private function execMultiHandle($mh){
        if(empty($mh)) return false;
        do{
            $mrc = curl_multi_exec($mh, $active);
        }while($mrc == CURLM_CALL_MULTI_PERFORM);
        while($active && $mrc == CURLM_OK){
            if(curl_multi_select($mh) != -1){
                do{
                    $mrc = curl_multi_exec($mh, $active);
                }while($mrc == CURLM_CALL_MULTI_PERFORM);
			}
        }
    }
}
//测试代码
$urlData = [
'https://www.baidu.com/',
'https://www.taobao.com/',
'http://weibo.com/',
'http://www.qq.com/'
];
$res = HttpMulti::multiRun($urlData);

関連する推奨事項:

curl で Web ページの応答データを php でキャプチャする

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

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