码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-06-28 18:11:25      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

  通过上篇文章清楚了通过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模拟多线程抓取网页(优化)

标签:

原文地址:http://www.cnblogs.com/loveyouyou616/p/5624184.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!