PHP cURL抓取网上图片

Posted 玻璃门

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP cURL抓取网上图片相关的知识,希望对你有一定的参考价值。

 

  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抓取网上图片的主要内容,如果未能解决你的问题,请参考以下文章

PHP抓取远程图片到本地保存

CURL抓取页面

php采集彩票开奖数据

PHP 抓取函数curl 实践

PHP5.6通过CURL上传图片@符无效的兼容问题

curl 抓取图片