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模拟多线程抓取网页(优化)的主要内容,如果未能解决你的问题,请参考以下文章