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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
杏林同学录(九)
Oct 09 PHP
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
小程序实现投票进度条
2019/11/20 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
如何基于python实现脚本加密
2019/12/28 Python
python中图像通道分离与合并实例
2020/01/17 Python
python如何操作mysql
2020/08/17 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
异常和异常类的概念
2014/09/12 面试题
总会计师岗位职责
2014/02/19 职场文书
公司活动总结怎么写
2014/06/25 职场文书
食品药品安全责任书
2015/05/11 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS
php实例化对象的实例方法
2021/11/17 PHP
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers