php教程

超轻量级php框架startmvc

PHP通过CURL实现定时任务的图片抓取功能示例

更新时间:2020-03-11 20:03:13 作者:startmvc
本文实例讲述了PHP通过CURL实现定时任务的图片抓取功能。分享给大家供大家参考,具体如

本文实例讲述了PHP通过CURL实现定时任务的图片抓取功能。分享给大家供大家参考,具体如下:

下文为各位介绍一个PHP定时任务通过CURL图片的抓取例子,希望例子对大家帮助,基本思路就是通过一个URL连接,将所有图片的地址抓取下来,然后循环打开图片,利用文件操作函数下载下来,保存到本地,并且把图片的alt属性也抓取下来,最后将数据保存到自己数据库.

废话不多说,看程序就能明白了,其中,需要用到PHP定时任务和PHP的一个第三方插件simple_html_dom.php 的使用,参考simple_html_dom的下载和使用.


<?php
 function getLink($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 = new simple_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,'//www.jb51.net'.$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;
 }
 function loadimg($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 = new simple_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]){
 case 1:
 $str = 'gif';
 break;
 case 2:
 $str = 'jpg';
 break;
 case 3:
 $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('//www.jb51.net/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($res as $item){
 echo '<img src='.$item["url"].'>'.$item["title"].'<br />';
 }
 $interval = 24*3600;
 sleep($interval);
 }while(true);
?>

PHP CURL 定时任务 图片抓取