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 相关文章推荐
输出控制类
Oct 09 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
PHP 写文本日志实现代码
May 18 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 PHP
PHP观察者模式原理与简单实现方法示例
Aug 25 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 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编程中八种常见的文件操作方式
2006/11/19 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php生成curl命令行的方法
2015/12/14 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python常见异常分类与处理方法
2017/06/04 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
Gap工厂店:Gap Factory
2017/11/02 全球购物
分层教学实施方案
2014/03/19 职场文书
店铺转让协议书
2015/01/29 职场文书
无保留意见审计报告
2015/06/05 职场文书
文化大革命观后感
2015/06/17 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
运动会通讯稿50字
2015/07/20 职场文书
爱国主义主题班会
2015/08/14 职场文书
GTX1660显卡搭配显示器推荐
2022/04/19 数码科技
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技