码迷,mamicode.com
首页 > Web开发 > 详细

PHP cURL抓取网上图片

时间:2018-03-18 15:03:15      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:分享   ret   exec   nec   网页   tlsv1   timeout   pathinfo   url   

 

  cURL的底层是由一个命令行工具实现的,用于获取远程文件或传输文件,更多的情况是用来模拟get/post表单提交。也可以用户文件上传,爬取文件,支持FTP/FTPS,HTTP/HTTPS等协议,通俗来讲,这些类型的服务器,cURL都可以抓取。

  今天尝试了一下用cURL抓取无聊网网上的图片。上代码。

 1 <?php
 2 $url = ‘http://wuliaoo.com/tuhua/‘;
 3 $ch = curl_init();
 4 
 5 curl_setopt($ch,CURLOPT_URL,$url);
 6 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); // 设置curl_exec()获取的信息以字符流形式返回
 7 curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1); // 设置CURL选项为TLS
 8 
 9 $data = curl_exec($ch);
10 $info = curl_getinfo($ch);
11 curl_close($ch);
12 // var_dump(htmlentities($data)); 打印获取的网页源码,但是不加htmlentities函数的话会将页面输出
13 preg_match_all(‘/<img[^>]*src=(\‘|\")(.*?)\\1[^>]*>/i‘,$data,$array); // 匹配正则,所有的img标签
14 
15 $path = ‘./aaimage/‘; // 目录提前建好
16 foreach ($array[2] as $k => $v) {
17     if(fopen($array[2][$k],‘r‘)){
18         ob_clean(); // 清空PHP缓存区的内容。这一步其实不确定需不需要,但是为了保险,我还是加上了。
19         $ch = curl_init();
20         curl_setopt($ch, CURLOPT_URL, $v);
21         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
22         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
23         $file = curl_exec($ch);
24         curl_close($ch);
25         $filename = pathinfo($v, PATHINFO_BASENAME); // 获取文件名和后缀
26         
27         $resource = fopen($path . $filename, ‘a‘);
28         fwrite($resource, $file);
29         fclose($resource);
30     }
31 
32 }

其实我们可以把这段代码封装好。而且还可以把获取网页内容换成file_get_contents()的形式。同样可以获取网页的内容。

function down_pic($url = null){
    $data = file_get_contents($url);
    preg_match_all(‘/<img[^>]*src=(\‘|\")(.*?)\\1[^>]*>/i‘,$data,$array);

    $path = ‘./aaimage/‘;
    foreach ($array[2] as $k => $v) {
        if(fopen($array[2][$k],‘r‘)){

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $v);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
            $file = curl_exec($ch);
            curl_close($ch);
            $filename = pathinfo($v, PATHINFO_BASENAME);
            
            $resource = fopen($path . $filename, ‘a‘);
            fwrite($resource, $file);
            fclose($resource);
        }

    }
}

// 这是获取该网站5页的图片
for($i=1;$i<=5;$i++){
    $url = ‘http://wuliaoo.com/tuhua/page/‘.$i;
    down_pic($url);
}

获取页数各个网站不是固定。

技术分享图片

这是第一页。page不带参数或者带上参数都可以跳转到这一页。

技术分享图片

这是第二页的URL

所以用for循环获取的话直接拼上后面的参数即可。当然,代码还有很多可以优化的地方。欢迎指正。

 

 

以上

 

PHP cURL抓取网上图片

标签:分享   ret   exec   nec   网页   tlsv1   timeout   pathinfo   url   

原文地址:https://www.cnblogs.com/chenrunxuan/p/8595304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!