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 中使用随机数的三个步骤
Oct 09 PHP
PHP图片上传类带图片显示
Nov 25 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
php防盗链的常用方法小结
Jul 02 PHP
PHP实现邮件群发的源码
Jun 18 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
php实现的通用图片处理类
Mar 24 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
Jan 25 PHP
php 数组字符串搜索array_search技巧
Jul 05 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
利用ajax+php实现商品价格计算
Mar 31 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 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
Python自动发邮件脚本
2017/03/31 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
电大自我鉴定
2013/10/27 职场文书
数控专业推荐信范文
2013/12/02 职场文书
护士思想汇报
2014/01/12 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
党校毕业心得体会
2014/09/13 职场文书
公司年会开场白
2015/06/01 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL