PHP使用CURL实现多线程抓取网页
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-25 14:09:25 浏览: 评论:0
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.phpfensi.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.phpfensi.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);
- ?>
Tags: CURL多线程 PHP抓取网页
- 上一篇:php实现根据IP地址获取其所在省市的方法
- 下一篇:php中JSON的使用方法
相关文章
- ·php结合curl实现多线程抓取(2021-06-10)
- ·几种PHP实现网页抓取的程序代码(2015-04-09)
- ·PHP抓取及分析网页的方法详解(2019-08-18)
- ·PHP抓取网页、解析HTML常用的方法总结(2021-06-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)