分享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 相关文章推荐
zend framework多模块多布局配置
Feb 26 PHP
php学习之简单计算器实现代码
Jun 09 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
php事件驱动化设计详解
Nov 10 PHP
php微信开发之百度天气预报
Nov 18 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
php ajax数据传输和响应方法
Aug 21 PHP
phpfpm的作用和用法
Oct 10 PHP
Yii框架where查询用法实例分析
Oct 22 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解决约瑟夫环示例
2014/04/09 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
js tab效果的实现代码
2009/12/26 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
python中实现栈的三种方法
2020/12/19 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
初中生期末考试的自我评价
2013/12/17 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
给客户的感谢信
2015/01/21 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
解析Java中的static关键字
2021/06/14 Java/Android
基于Python实现一个春节倒计时脚本
2022/01/22 Python