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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
php socket通信简单实现
Nov 18 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
PHP项目多语言配置平台实现过程解析
May 18 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 chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
浅析Jquery操作select
2016/12/13 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python实现包含min函数的栈
2016/04/29 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
小学生自我评价范例
2013/09/24 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
汽车车尾标语大全
2015/08/11 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL