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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
Jun 01 PHP
php PDO中文乱码解决办法
Jul 20 PHP
PHP源码之explode使用说明
Aug 05 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 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
用PHP4访问Oracle815
2006/10/09 PHP
PHP 高手之路(一)
2006/10/09 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
学习python 之编写简单乘法运算题
2016/02/27 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
三星美国官网:Samsung美国
2017/02/06 全球购物
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
派出所所长先进事迹
2014/05/19 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
让生命充满爱观后感
2015/06/08 职场文书
手写实现JS中的new
2021/11/07 Javascript