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桌面中心(四) 数据显示
Mar 11 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
PHP 获取远程文件内容的函数代码
Mar 24 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
Mar 19 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
php验证码生成代码
Nov 11 PHP
Symfony的安装和配置方法
Mar 17 PHP
PHP多进程编程实例详解
Jul 19 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PDO::rollBack讲解
Jan 29 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
PHP面向对象编程快速入门
2006/10/09 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
PHP生成plist数据的方法
2015/06/16 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JS hashMap实例详解
2016/05/26 Javascript
javascript简易画板开发
2020/04/12 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
2017/12/20 Javascript
vue input输入框模糊查询的示例代码
2018/05/22 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
python 字符串只保留汉字的方法
2018/11/16 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
信号生成及DFT的python实现方式
2020/02/25 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
华为python面试题
2016/05/03 面试题
文明之星事迹材料
2014/05/09 职场文书
动物科学专业求职信
2014/07/27 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
退税申请报告怎么写
2015/05/18 职场文书
师范生小学见习总结
2015/06/23 职场文书