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利用COM对象访问SQLServer、Access
Oct 09 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
数据库中排序的对比及使用条件详解
Feb 23 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
laravel5.6实现数值转换
Oct 23 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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 array 的加法操作代码
2010/07/24 PHP
ThinkPHP中的关联模型注意点
2014/06/16 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
JS 继承实例分析
2008/11/04 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
浅谈编码,解码,乱码的问题
2016/12/30 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python中的json总结
2018/10/11 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
Django中的AutoField字段使用
2020/05/18 Python
python实现按日期归档文件
2021/01/30 Python
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
自我评价范文分享
2014/01/04 职场文书
临床医学专业求职信
2014/08/08 职场文书
股指期货心得体会
2014/09/10 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
摩登时代观后感
2015/06/03 职场文书
小鞋子观后感
2015/06/05 职场文书
光荣之路观后感
2015/06/12 职场文书
追悼词范文大全
2015/06/23 职场文书
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS