PHP多线程抓取网页实现代码


Posted in PHP onJuly 22, 2010

受限于php语言本身不支持多线程,所以开发爬虫程序效率并不高,这时候往往需 要借助Curl Multi Functions 它可以实现并发多线程的访问多个url地址。既然 Curl Multi Function如此强大,能否用 Curl Multi Functions 来写并发多线程下载文件呢,当然可以,下面给出我的代码:

代码1:将获得的代码直接写入某个文件

<?php 
$urls = array( 
'http://www.sina.com.cn/', 
'http://www.sohu.com/', 
'http://www.163.com/' 
); // 设置要抓取的页面URL $save_to='/test.txt'; // 把抓取的代码写入该文件 
$st = fopen($save_to,"a"); 
$mh = curl_multi_init(); 
foreach ($urls as $i => $url) { 
$conn[$i] = curl_init($url); 
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
curl_setopt($conn[$i], CURLOPT_HEADER ,0); 
curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); 
curl_setopt($conn[$i], CURLOPT_FILE,$st); // 设置将爬取的代码写入文件 
curl_multi_add_handle ($mh,$conn[$i]); 
} // 初始化 
do { 
curl_multi_exec($mh,$active); 
} while ($active); // 执行 
foreach ($urls as $i => $url) { 
curl_multi_remove_handle($mh,$conn[$i]); 
curl_close($conn[$i]); 
} // 结束清理 
curl_multi_close($mh); 
fclose($st); 
?>

代码2:将获得的代码先放入变量,再写入某个文件
<?php 
$urls = array( 
'http://www.sina.com.cn/', 
'http://www.sohu.com/', 
'http://www.163.com/' 
); $save_to='/test.txt'; // 把抓取的代码写入该文件 
$st = fopen($save_to,"a"); 
$mh = curl_multi_init(); 
foreach ($urls as $i => $url) { 
$conn[$i] = curl_init($url); 
curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); 
curl_setopt($conn[$i], CURLOPT_HEADER ,0); 
curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); 
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串 
curl_multi_add_handle ($mh,$conn[$i]); 
} 
do { 
curl_multi_exec($mh,$active); 
} while ($active); 
foreach ($urls as $i => $url) { 
$data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串 
fwrite($st,$data); // 将字符串写入文件。当然,也可以不写入文件,比如存入数据库 
} // 获得数据变量,并写入文件 
foreach ($urls as $i => $url) { 
curl_multi_remove_handle($mh,$conn[$i]); 
curl_close($conn[$i]); 
} 
curl_multi_close($mh); 
fclose($st); 
?>
PHP 相关文章推荐
繁体中文转换为简体中文的PHP函数
Oct 09 PHP
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
Aug 21 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
php格式化金额函数分享
Feb 02 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
php上传文件的增强函数
Jul 21 #PHP
php 模拟POST|GET操作实现代码
Jul 20 #PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 #PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 #PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 #PHP
ajax实现无刷新分页(php)
Jul 18 #PHP
php将会员数据导入到ucenter的代码
Jul 18 #PHP
You might like
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
Prototype Number对象 学习
2009/07/19 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
快速入门Vue
2016/12/19 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
Python中enumerate函数代码解析
2017/10/31 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
pytorch实现特殊的Module--Sqeuential三种写法
2020/01/15 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
保安自我鉴定范文
2013/12/08 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
授权委托书范本
2014/04/03 职场文书
植树节活动总结
2014/04/30 职场文书
2014年团工作总结
2014/11/27 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js