分享PHP源码批量抓取远程网页图片并保存到本地的实现方法


Posted in PHP onDecember 01, 2015

做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢。有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不会被影响。

但是作为一个热爱php的开发者来说,更多的是喜欢自己动手。所以,我就写出了下面的一个源码,php远程抓取图片小程序。可以读取css文件并抓取css代码中的背景图片,下面这段代码也是针对抓取css中图片而编写的。

<?php
 header("Content-Type: text/html; charset=utf-8");
    error_reporting(E_ERROR|E_WARNING);
 //全局配置
 $fromFile = "aaa.css";  //要抓取的文件
 $savePath = "ttttttttt";  //保存路径
 $fromDomain = "http://www.xxx.com/"; //要抓取的域名
 //读取css样式并且分离出所有image的url
 $str = file_get_contents($fromFile);
 $strArr = explode("url(",$str); 
 $i = 0;
 foreach($strArr as $val){
 $val1 = explode(")",$val);
 if(strpos($val1[0],'jpg')||strpos($val1[0],'png')||strpos($val1[0],'gif'))
 $imgUrl[$i++] = $val1[0];
 }
    //PS:上面可以用正则的,但是我觉得这样也不错
 //开始抓取
 foreach($imgUrl as $url){
 if($url=="") continue;
 $filename = $savePath.$url;
 $url = $fromDomain.$url;
 getImage($url,$filename);
 }
 function getImage($url,$filename){
 ob_start();
 $context = stream_context_create(
       array (
     'http' => array (
      'follow_location' => false // don't follow redirects
      )
     )
 );
 //请确保php.ini中的fopen wrappers已经激活
 readfile( $url,false,$context);
 $img = ob_get_contents();
        ob_end_clean();
 $fp2 = @fopen($filename,"a");
 fwrite($fp2,$img);
 fclose($fp2);
 echo $filename." ok √<br/>";
 }
?>

然后没有意外的话,你会发现,你指定的文件夹下面已经满满的都是图片了,哈哈..

ps:php获取远程图片并下载保存到本地

分享一个利用php获取远程图片并将远程图片下载保存到本地的函数代码:

/* 
*功能:php完美实现下载远程图片保存到本地 
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式 
*当保存文件名称为空时则使用远程文件原来的名称 
*/ 
function getImage($url,$save_dir='',$filename='',$type=0){ 
  if(trim($url)==''){ 
    return array('file_name'=>'','save_path'=>'','error'=>1); 
  } 
  if(trim($save_dir)==''){ 
    $save_dir='./'; 
  } 
  if(trim($filename)==''){//保存文件名 
    $ext=strrchr($url,'.'); 
    if($ext!='.gif'&&$ext!='.jpg'){ 
      return array('file_name'=>'','save_path'=>'','error'=>3); 
    } 
    $filename=time().$ext; 
  } 
  if(0!==strrpos($save_dir,'/')){ 
    $save_dir.='/'; 
  } 
  //创建保存目录 
  if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){ 
    return array('file_name'=>'','save_path'=>'','error'=>5); 
  } 
  //获取远程文件所采用的方法 
  if($type){ 
    $ch=curl_init(); 
    $timeout=5; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    $img=curl_exec($ch); 
    curl_close($ch); 
  }else{ 
    ob_start(); 
    readfile($url); 
    $img=ob_get_contents(); 
    ob_end_clean(); 
  } 
  //$size=strlen($img); 
  //文件大小 
  $fp2=@fopen($save_dir.$filename,'a'); 
  fwrite($fp2,$img); 
  fclose($fp2); 
  unset($img,$url); 
  return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0); 
}

以上内容是小编给大家分享的PHP源码批量抓取远程网页图片并保存到本地的实现方法,希望大家喜欢。

PHP 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
在 PHP 中使用随机数的三个步骤
Oct 09 PHP
PHP4实际应用经验篇(3)
Oct 09 PHP
PHP开发过程中常用函数收藏
Dec 14 PHP
php allow_url_include的应用和解释
Apr 22 PHP
Parse正式发布开源PHP SDK
Aug 11 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
php中将一个对象保存到Session中的方法
Mar 13 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
基于php实现七牛抓取远程图片
Dec 01 #PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 #PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 #PHP
简单了解PHP编程中数组的指针的使用
Nov 30 #PHP
PHP 微信支付类 demo
Nov 30 #PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 #PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 #PHP
You might like
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python set集合类型操作总结
2014/11/07 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
基于python的列表list和集合set操作
2019/11/24 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
同学会主持词
2014/03/18 职场文书
食品安全标语
2014/06/07 职场文书
毕业生工作求职信
2014/06/30 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
2015年人事科工作总结
2015/04/28 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
React + Threejs + Swiper 实现全景图效果的完整代码
2021/06/28 Javascript
Python闭包的定义和使用方法
2022/04/11 Python