PHP通过CURL实现定时任务的图片抓取功能示例
本文实例讲述了PHP通过CURL实现定时任务的图片抓取功能。分享给大家供大家参考,具体如下:
下文为各位介绍一个PHP定时任务通过CURL图片的抓取例子,希望例子对大家帮助,基本思路就是通过一个URL连接,将所有图片的地址抓取下来,然后循环打开图片,利用文件操作函数下载下来,保存到本地,并且把图片的alt属性也抓取下来,最后将数据保存到自己数据库.
废话不多说,看程序就能明白了,其中,需要用到PHP定时任务和PHP的一个第三方插件simple_html_dom.php的使用,参考simple_html_dom的下载和使用.
<?php functiongetLink($url){ include_once('simple_html_dom.php'); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $output=curl_exec($ch); curl_close($ch); $html=newsimple_html_dom(); $html->load($output); $links=array(); $arr=array(); $title=array(); foreach($html->find('a')as$element){ if(preg_match('#^\/content_[0-9]+_1\.html$#i',$element->href)){ array_push($links,'https://www.nhooo.com'.$element->href); array_push($title,$element->title); } } $links=array_values(array_unique($links)); $title=array_values(array_unique($title)); $arr['links']=$links; $arr['title']=$title; return$arr; } functionloadimg($url,$dirname){ include_once('simple_html_dom.php'); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $output=curl_exec($ch); curl_close($ch); $html=newsimple_html_dom(); $html->load($output); $arr=array(); foreach($html->find('img[w]')as$element){ $image=$element->src; } $data=file_get_contents($image); $info=getimagesize($image);//获取图片信息,大小,格式 switch($info[2]){ case1: $str='gif'; break; case2: $str='jpg'; break; case3: $str='png'; break; default: continue; break; } if($info[1]<10||$info[0]<10)continue;//图片太小,不是有价值的图片,跳过本次循环 $filename=time().rand(1,999999).'.'.$str; if(!is_dir($dirname)){ mkdir($dirname,0777,true); } $fp=fopen($dirname.$filename,'w'); fwrite($fp,$data); fclose($fp); return$dirname.$filename; } do{ set_time_limit(0); ignore_user_abort(); $img=getLink('https://www.nhooo.com/qutu_1.html'); $count=count($img['links']); $arr=array(); for($i=0;$i<$count;$i++){ $arr[]=loadimg($img['links'][$i],'images/'); } $img['url']=$arr; echo'<br/>'; $img['title']; $res=array(); $len=count($img['title']); //重新将数据组装成我们常用的二维数组,方便数据的数据库处理 for($i=0;$i<$len;$i++){ $res[$i]['title']=$img['title'][$i]; $res[$i]['url']=$img['url'][$i]; } foreach($resas$item){ echo'<imgsrc='.$item["url"].'>'.$item["title"].'<br/>'; } $interval=24*3600; sleep($interval); }while(true); ?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《phpcurl用法总结》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。