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循环获取的话直接拼上后面的参数即可。当然,代码还有很多可以优化的地方。欢迎指正。

 

 

以上

 

转载于:https://www.cnblogs.com/chenrunxuan/p/8595304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值