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的module的时候的配置的解决方案引发的思考
Jan 27 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP实现自动对图片进行滚动显示的方法
Mar 12 PHP
php读取csc文件并输出
May 21 PHP
ThinkPHP控制器详解
Jul 27 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
实例讲解php数据访问
May 09 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP实现的简单路由和类自动加载功能
Mar 13 PHP
thinkphp5使html5实现动态跳转的例子
Oct 16 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
JAVA/JSP学习系列之四
2006/10/09 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
第一次接触JS require.js模块化工具
2016/04/17 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python 操作文件的基本方法总结
2017/08/10 Python
对python Tkinter Text的用法详解
2018/10/11 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
python构造函数init实例方法解析
2020/01/19 Python
django实现日志按日期分割
2020/05/21 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
HTML5 Web 存储详解
2016/09/16 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
客服文员岗位职责
2013/11/29 职场文书
优秀员工评优方案
2014/06/13 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
党支部先进事迹材料
2014/12/24 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android