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模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php explode函数实例代码
Feb 27 PHP
header跳转和include包含问题详解
Sep 08 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
php实现的操作excel类详解
Jan 15 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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警告错误信息的解决方法
2013/06/03 PHP
php删除数组元素示例分享
2014/02/17 PHP
php中JSON的使用方法
2015/04/30 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
js实现简单的无缝轮播效果
2020/09/05 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
python并发2之使用asyncio处理并发
2017/12/21 Python
python实现最长公共子序列
2018/05/22 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
python实现归并排序算法
2018/11/22 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
什么是python的id函数
2020/06/11 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
人力资源本科毕业生求职信
2014/06/04 职场文书
普通话宣传标语
2014/06/26 职场文书
行政处罚告知书
2015/07/01 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
深入理解 Golang 的字符串
2022/05/04 Golang