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