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读取RSS feed的代码
Aug 01 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
PHP stream_context_create()函数的使用示例
May 12 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
Feb 17 PHP
PHP中的函数声明与使用详解
May 27 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
PHP全局使用Laravel辅助函数dd
Dec 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
2009/11/12 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
NumPy统计函数的实现方法
2020/01/21 Python
python数据爬下来保存的位置
2020/02/17 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
啦啦队口号大全
2014/06/16 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
高一军训决心书
2015/02/05 职场文书
自荐信怎么写
2015/03/04 职场文书