curl模拟多线程抓取网页(优化)

Posted 睡着的糖葫芦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了curl模拟多线程抓取网页(优化)相关的知识,希望对你有一定的参考价值。

  通过上篇文章清楚了通过curl_multi_*函数可以一次请求多个url,但是也留下了问题,就是结果要等所有数据请求结束一起返回,才能逐个处理数据。优化代码,使先成功请求的url先返回处理结果,而不是等着所有一起返回。

//修改后的模型
do {
    while (($execrun = curl_multi_exec($mh, $running)) == CURLM_CALL_MULTI_PERFORM) ;

    //CURLM_OK只是意味着数据传送完毕或者没有数据 可传送
    if ($execrun != CURLM_OK)
        break;

    //curl_multi_info_read 查询批处理句柄是否单独的传输线程中有消息或信息返回。
    while ($done = curl_multi_info_read($mh)) {

        $info = curl_getinfo($done[‘handle‘]);
        $tmp_result = curl_multi_getcontent($done[‘handle‘]);
        $error = curl_error($done[‘handle‘]);
        curl_multi_remove_handle($mh, $done[‘handle‘]);
        var_dump($tmp_result);
        //可以观察到,只要有url请求成功,就会把数据返回生成文件。
        file_put_contents(‘curl_multi2.log‘,$tmp_result."\r\n\r\n\r\n\r\n",FILE_APPEND);
    }

    
    if ($running)
        curl_multi_select($mh);

} while ($running);

  运行php脚本,很快就会看见 .log文件生成并且有对应数据,而不是整个请求结束才生成完整的log。

  参考:http://my.oschina.net/u/586648/blog/184020

以上是关于curl模拟多线程抓取网页(优化)的主要内容,如果未能解决你的问题,请参考以下文章

PHP CURL模拟登陆

PHP通过CURL模拟登录并获取数据

PHP模拟登录并获取数据

用C程序通过curl多线程抓取网页的实例怎么写,请高手贴出个简单实例吧!谢谢了!急!

用PHP的curl实现并发请求远程文件(抓取远程网页)

PHP多进程 :内部多进程