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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
PHP 身份验证方面的函数
Oct 11 PHP
深入掌握include_once与require_once的区别
Jun 17 PHP
yii上传文件或图片实例
Apr 01 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
PHP中串行化用法示例
Nov 16 PHP
php表单习惯用的正则表达式
Oct 11 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP实现通过strace定位故障原因的方法
Apr 29 PHP
PHP实现百度人脸识别
May 06 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 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
新浪新闻小偷
2006/10/09 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
php中namespace use用法实例分析
2016/01/22 PHP
初识javascript 文档碎片
2010/07/13 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
axios学习教程全攻略
2017/03/26 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
自己使用总结Python程序代码片段
2015/06/02 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python中请不要再用re.compile了
2019/06/30 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
python 求10个数的平均数实例
2019/12/16 Python
各营销点岗位职责范本
2014/03/05 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
2014年市场部工作总结
2014/11/25 职场文书
2015年售票员工作总结
2015/04/29 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
Python字符串的转义字符
2022/04/07 Python