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


Posted in PHP onOctober 03, 2016

本文实例讲述了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,'https://3water.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;
 }
 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('https://3water.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($res as $item){
   echo '<img src='.$item["url"].'>'.$item["title"].'<br />';
  }
  $interval = 24*3600;
  sleep($interval);
  }while(true);
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
第五节--克隆
Nov 16 PHP
php简单封装了一些常用JS操作
Feb 25 PHP
php whois查询API制作方法
Jun 23 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
PHP面向对象法则
Feb 23 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
php生成验证码函数
Oct 20 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 #PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 #PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 #PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 #PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 #PHP
php简单统计中文个数的方法
Sep 30 #PHP
php简单实现多维数组排序的方法
Sep 30 #PHP
You might like
基于empty函数的判断详解
2013/06/17 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
PHP入门教程之图像处理技巧分析
2016/09/11 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
json简单介绍
2008/06/10 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
JavaScript中检测变量是否存在遇到的一些问题
2013/11/11 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
jQuery操作css样式
2017/05/15 jQuery
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
angular多语言配置详解
2019/05/16 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
Django如何自定义分页
2018/09/25 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
python map比for循环快在哪
2020/09/21 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
python中@contextmanager实例用法
2021/02/07 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
仓库主管岗位职责
2014/03/02 职场文书
一份文言文检讨书
2014/09/13 职场文书
党员身份证明材料
2015/06/19 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL