php 多线程抓取网页的代码分享

php中文网
发布: 2016-07-25 08:57:16
原创
1067人浏览过
本文介绍下,用php实现多线程抓取网页的代码,有需要的朋友参考下。

在php中,可以使用Curl完成各种传送文件的操作,比如模拟浏览器发送GET,POST请求等。 php语言本身并不支持多线程,所以开发爬虫程序效率并不高,因此借助Curl Multi Functions 来实现并发多线程的访问多个url地址。

有关curl的基础内容,可以参考如下的文章: php curl应用实例分析 php curl用法的实例代码 php curl 学习总结

本节介绍使用 curl multi functions 并发多线程下载文件的例子。

例1,获取内容直接写入文件

代码小浣熊
代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 51
查看详情 代码小浣熊
<?php
/**
* 多线程抓取网页内容
* edit by bbs.it-home.org
*/
$urls = array(   
 'http://www.sina.com.cn/',   
 'http://www.sohu.com/',   
 'http://bbs.it-home.org/' 
); //要抓取的页面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://bbs.it-home.org/' 
);   
   
$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怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号