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 相关文章推荐
小偷PHP+Html+缓存
Dec 20 PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
php实现的通用图片处理类
Mar 24 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
微信支付的开发流程详解
Sep 13 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 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
提高PHP编程效率的方法
2013/11/07 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
2014/08/23 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
jQuery1.6 使用方法一
2011/11/23 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
Python中元组,列表,字典的区别
2017/05/21 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
python与idea的集成的实现
2020/11/20 Python
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
Stella McCartney官网:成衣、包袋、香水、内衣、童装及Adidas系列
2018/12/20 全球购物
Java基础知识面试题
2014/03/25 面试题
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
房屋认购协议书
2015/01/29 职场文书
自我推荐信格式模板
2015/03/24 职场文书
财务统计员岗位职责
2015/04/14 职场文书
超市食品安全承诺书
2015/04/29 职场文书
地道战观后感400字
2015/06/04 职场文书
学校运动会加油词
2015/07/18 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers