php单线程实现并行抓取网页

php单线程实现并行抓取网页

ID:8922367

大小:15.32 KB

页数:4页

时间:2018-04-12

php单线程实现并行抓取网页_第1页
php单线程实现并行抓取网页_第2页
php单线程实现并行抓取网页_第3页
php单线程实现并行抓取网页_第4页
资源描述:

《php单线程实现并行抓取网页》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、本PHP教程将模拟并行抓取多个页面信息的过程,关键在于单线程的并行处理。一般情况下,大家写抓取多个页面信息的程序都采用串行方案,但获取周期过长,不实用。于是我想到用curl去并行抓取。但是,最后发现,那个虚拟服务器上没有curl,这真是让人纠结。于是,我决定改变思路,用单个线程也实现多个线程的效果。我想对网络编程有点了解的人肯定知道IO复用这个概念,当然PHP上也是支持的,而且,内部支持,不需要任何扩展。可能有很多年编程经验的人对PHP的stream函数可能不太了解。PHP的压缩文件流,文件流,tcp协议下的应用都封装成一个st

2、ream。所以,读本地文件和读网络文件没有任何的差别。说了这样多,我想大家都基本上明白了,直接贴上代码吧:代码比较的粗糙,如果大家要实际用的话,还是要处理一些细节问题。代码

3、query'];$fp=stream_socket_client("tcp://{$host}:80",$errno,$errstr,30);if(!$fp){echo"$errstr($errno)
";returnfalse;}else{fwrite($fp,"GET{$get}HTTP/1.0rHost:{$host}rAccept:*/*rr");}return$fp;}functionhttp_multi_get($urls){$result=array();$fps=array()

4、;foreach($urlsas$key=>$url){$fp=http_get_open($url);if($fp===false){$result[$key]=false;}else{$result[$key]='';$fps[$key]=$fp;}}while(1){$reads=$fps;if(empty($reads)){break;}if(($num=stream_select($reads,$w=null,$e=null,30))===false){echo"error";returnfalse;}elseif($

5、num>0){//canreadforeach($readsas$value){$key=array_search($value,$fps);if(!feof($value)){$result[$key].=fread($value,128);}else{unset($fps[$key]);}}}else{//timeoutecho"timeout";returnfalse;}}foreach($resultas$key=>&$value){if($value){$value=explode("rr",$value,

6、2);}}return$result;}$urls=array();$urls[]="http://www.qq.com";$urls[]="http://www.sina.com.cn";$urls[]="http://www.sohu.com";$urls[]="http://www.blue1000.com";//并行的抓取$t1=microtime(true);$result=http_multi_get($urls);$t1=microtime(true)-$t1;var_dump("cost:".$t1);//串行的

7、抓取$t1=microtime(true);foreach($urlsas$value){file_get_contents($value);}$t1=microtime(true)-$t1;var_dump("cost:".$t1);?>最后运行的结果:string'cost:3.2403128147125'(length=21)string'cost:6.2333900928497'(length=21)基本上是两倍的效率,当然,发现新浪非常的慢,要2.5s左右,基本上是被他给拖累了,360只要0.2s如果,所有网站都差不多

8、的速度,并行的数目更大,那么差的倍数也就越大。关键词:网页线程并行抓取0顶一下收藏推荐打印

9、录入:blue1000

10、阅读:1484次php中如何判断中英文字符博客中添加日历的php代码最新图文ThinkPHP3.1编程开发快速入门教程之:数据篇ThinkPHP3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。