您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

PHP多线程抓取网页的代码

添加时间:2014-2-9 19:58:10  添加: 思海网络 
 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/',

  ); // 设置要抓取的页面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/',

  );

  $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、多线程、数据库

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站