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 相关文章推荐
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
php去除换行(回车换行)的三种方法
Mar 26 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
Jun 21 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
详解PHP实现执行定时任务
Dec 21 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
PHP新手指南
Apr 01 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 adodb连接mssql解决乱码问题
2009/06/12 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
[02:54]DOTA2亚洲邀请赛 VG战队出场宣传片
2015/02/07 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
通过python3实现投票功能代码实例
2019/09/26 Python
Python 支持向量机分类器的实现
2020/01/15 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
企业员工薪酬方案
2014/06/04 职场文书
英文演讲稿开场白
2014/08/25 职场文书
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
营业用房租赁协议书
2014/11/26 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
会议主持人开场白台词
2015/05/28 职场文书
八一建军节主持词
2015/07/01 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python