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 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,因此经常需要借助Cur ...
- Python 多线程抓取网页 牛人 use raw socket implement http request great
Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...
- Python 多线程抓取网页
Python 多线程抓取网页 - 糖拌咸鱼 - 博客园 Python 多线程抓取网页 最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术 ...
- 【php】curl模拟登录抓取页面信息
[php]curl模拟登录抓取页面信息 在本项目中,使用php抓取四川大学综合教务网站的成绩信息.课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户. 本 ...
- php curl与正则表达式抓取网页数据的例子
php使用curl和 正则表达式抓取网页数据示例,这里是抓取某网站的小说. 利用 curl和正则表达式做的一个针对磨铁中文网非vip章节的小说抓取器,支持输入小说ID下载小说. 依赖项:curl 可以 ...
- Python多线程抓取网页图片地址
mini-spider 功能描述: 多线程网络爬虫,爬取网页图片地址(也可提取其他特征的URL) 使用python开发一个迷你定向抓取器mini_spider.py,实现对种子链接的广度优先抓取,并把 ...
- python中模拟浏览器抓取网页(-)
对于平时我们抓取网页的内容时,比较倾向于直接利用urllib进行抓取(这里我就基于python的2.7版本进行解说,对于python3之后的版本,是将python中的urllib和urllib2和并成 ...
- PHP实现多线程抓取网页
来源:http://www.cnblogs.com/jyginger/archive/2010/07/20/1781516.html PHP 利用 Curl Functions 可以完成各种传送文件操 ...
- python多线程爬虫 爬取多个网页_Python 多线程抓取网页
最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2. ...
最新文章
- 力扣(LeetCode)刷题,简单题(第15期)
- R语言Kmeans聚类、抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性、fpc包的kmeansruns函数通过CH准则和ASW获取最优K值
- 苹果为何加强云计算布局 汤换药也换?
- xp网吧用母盘制作说明
- 2013应届毕业生“京北方”校招应聘总结
- linux中断处理汇编入口,Linux中断处理体系结构分析(一)
- 浅谈shell中的clear命令实现
- 【工作总结】银行的等级架构
- 语言中能产生汉明窗吗_0—6岁幼儿的语言、秩序、情感、数学敏感期,有这些特点和表现...
- 为什么PostgreSQL是最先进的开源数据库
- 正向最大匹配中文分词算法
- 分享12306抢票心得-最终篇
- imx6ull设备树
- 最新华为EMUI 11.0.0 Mate40和Mate30成功安装Google play及谷歌套件(附带解决谷歌弹窗)的方法
- notifyIcon 用法
- 蓝桥02 等差素数列 ——数论知识
- 联邦学习拜占庭鲁棒差分隐私博弈论
- 学习线性代数-行列式 笔记(一)
- js的tree转数组
- 猜猜我是谁(猜数游戏)
热门文章
- Mysql中设置默认时间为当前值
- ubuntu服务器常见使用技巧及-kill掉后GPU显存不释放进程-
- 直接通过Binder的onTransact完成跨进程通信
- 鹅厂bugly应用升级不能安装(Android7.0的新变化)
- Kamailio v4.4.6 发布,开源 SIP 服务器
- 毕飞宇:我是靠阅读支撑起来的作家 因为生活没有给我那么多
- linux之权限和chmod、chown命令
- Effective C# 原则13:用静态构造函数初始化类的静态成员(译)
- MySQL 和 Innobackup 不定期卡住的秘密
- React.js 小书 Lesson12 - state vs props