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 xml-rpc远程调用
Dec 19 PHP
php 显示指定路径下的图片
Oct 29 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
php文档更新介绍
Jul 22 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
PHP中if和or运行效率对比
Dec 12 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
php图像验证码生成代码
Jun 08 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微信公众号开发之校园图书馆
2018/10/20 PHP
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
轻量级javascript 框架Backbone使用指南
2015/07/24 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
浅谈js的异步执行
2016/10/18 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
ES6正则表达式扩展笔记
2017/07/25 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python采集百度百科的方法
2015/06/05 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
Python中property属性实例解析
2018/02/10 Python
python如何爬取个性签名
2018/06/19 Python
python实现大量图片重命名
2020/03/23 Python
Python字符串格式化输出代码实例
2019/11/22 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
高级工程师岗位职责
2013/12/15 职场文书
护理个人求职信范文
2014/01/08 职场文书
五年级科学教学反思
2014/02/05 职场文书
反对邪教标语
2014/06/30 职场文书
教师节活动总结
2014/08/29 职场文书
会计求职简历自我评价
2015/03/10 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
诚信教育主题班会
2015/08/13 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
Python中如何处理常见报错
2022/01/18 Python