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图片上传程序
Mar 27 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
ThinkPHP之N方法实例详解
Jun 20 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
PHP中PDO基础教程 入门级
2011/09/04 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
javascript实现动态标签云
2015/10/16 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
javascript连接mysql与php通过odbc连接任意数据库的实例
2017/12/27 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
一张图带我们入门Python基础教程
2017/02/05 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
python实现加密的方式总结
2020/01/19 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
Django ModelForm操作及验证方式
2020/03/30 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
python右对齐的实例方法
2020/07/05 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
村道德模范事迹材料
2014/08/28 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
中学生自我评价2015
2015/03/03 职场文书
妇产科护理心得体会
2016/01/22 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android