找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1742|回复: 0
打印 上一主题 下一主题

PHP使用CURL实现多线程抓取网页

[复制链接]

2500

主题

2513

帖子

7520

积分

论坛元老

Rank: 8Rank: 8

积分
7520
跳转到指定楼层
楼主
发表于 2018-2-14 05:46:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,受限于php语言本身不支持多线程,所以开发爬虫程序效率并不高,这时候往往需 要借助Curl Multi Functions 它可以实现并发多线程的访问多个url地址。既然 Curl Multi Function如此强大,能否用 Curl Multi Functions 来写并发多线程下载文件呢,当然可以,下面给出我的代码:
代码1:将获得的代码直接写入某个文件
$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:将获得的代码先放入变量,再写入某个文件
$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中使用CURL伪造来路抓取页面或文件
  • php下通过curl抓取yahoo boss 搜索结果的实现代码
  • PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
  • 使用PHP curl模拟浏览器抓取网站信息
  • php使用curl抓取qq空间的访客信息示例
  • php使用curl和正则表达式抓取网页数据示例
  • php利用curl抓取新浪微博内容示例
  • PHP curl实现抓取302跳转后页面的示例
  • 使用php方法curl抓取AJAX异步内容思路分析及代码分享
  • PHP curl 抓取AJAX异步内容示例
  • php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
  • php通过curl添加cookie伪造登陆抓取数据的方法
  • php使用curl代理实现抓取数据的方法
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端