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 相关文章推荐
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP实现采集程序原理和简单示例代码
Mar 18 PHP
php调用dll的实例操作动画与代码分享
Aug 14 PHP
PHP通过串口实现发送短信
Jul 08 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 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
建立动态的WML站点(二)
2006/10/09 PHP
建立文件交换功能的脚本(三)
2006/10/09 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
php定时计划任务与fsockopen持续进程实例
2014/05/23 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
高级工程师岗位职责
2013/12/15 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
《燕子》教学反思
2014/02/18 职场文书
我的长生果教学反思
2014/04/28 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
房地产销售主管岗位职责
2015/02/13 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript