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生成EXCEL的东东
Oct 09 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
php检测useragent版本示例
Mar 24 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
用php如何解决大文件分片上传问题
Jul 07 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python内置类型性能分析过程实例
2020/01/29 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
幼儿园教师考核制度
2014/02/01 职场文书
十八大感想感言
2014/02/10 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
公司搬迁通知
2015/04/20 职场文书
高一军训感想
2015/08/07 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android