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

 更新时间:2010年07月22日 01:03:58   作者:  
PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等。
受限于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 强制下载文件实现代码

    php 强制下载文件实现代码。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • 基于PHP实现邮件实时通知功能

    基于PHP实现邮件实时通知功能

    随着企业化的管理越来越规范,各种项目管理系统中,都需要加入到邮件实时通知功能,所以在项目中如何整合发邮件功能,其实也是很重要的一点。本文为大家介绍了PHP实现邮件实时通知功能的示例代码,需要的可以参考一下
    2022-04-04
  • PHP实现微信扫码登录功能的两种方式总结

    PHP实现微信扫码登录功能的两种方式总结

    这篇文章主要为大家介绍了利用PHP实现微信扫码登录功能的两种方式,文中的示例代码讲解详细,对我们学习有一定借鉴价值,需要的可以参考一下
    2022-08-08
  • PHP文件锁函数flock()详细介绍

    PHP文件锁函数flock()详细介绍

    这篇文章主要介绍了PHP文件锁函数flock()详细介绍,本文着重对flock函数的作用和参数讲解,以及使用需要注意的问题,需要的朋友可以参考下
    2014-11-11
  • PHP人民币金额数字转中文大写的函数代码

    PHP人民币金额数字转中文大写的函数代码

    在网上看到一个非常有趣的PHP人民币金额数字转中文大写的函数,其实质就是数字转换成中文大写,测试了一下,非常有趣,随便输个数字,就可以将其大写打印出来,新手朋友们试一下吧
    2013-02-02
  • PHP模拟asp中response类实现方法

    PHP模拟asp中response类实现方法

    这篇文章主要介绍了PHP模拟asp中response类的方法,可实现模拟ASP中response类处理客户端响应的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • 基于php伪静态的实现方法解析

    基于php伪静态的实现方法解析

    这篇文章主要介绍了基于php伪静态的实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • php下图片文字混合水印与缩略图实现代码

    php下图片文字混合水印与缩略图实现代码

    php中图片文字混合水印与缩略图的实现代码,需要的朋友可以参考下。
    2009-12-12
  • PHP使用pdo实现事务处理操作示例

    PHP使用pdo实现事务处理操作示例

    这篇文章主要介绍了PHP使用pdo实现事务处理操作,结合实例形式较为详细的分析了php基于pdo实现事务处理的相关原理与操作技巧,需要的朋友可以参考下
    2018-09-09
  • PHP+JS+rsa数据加密传输实现代码

    PHP+JS+rsa数据加密传输实现代码

    PHP+JS+rsa数据加密传输实现代码,需要的朋友可以参考下。
    2011-03-03

最新评论