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抓取网上图片
原文地址:https://www.cnblogs.com/chenrunxuan/p/8595304.html