分享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 相关文章推荐
ftp类(example.php)
Oct 09 PHP
社区(php&amp;&amp;mysql)四
Oct 09 PHP
测试您的 PHP 水平的题目
May 30 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
php+mysql开发中的经验与常识小结
Mar 25 PHP
PHP 8新特性简介
Aug 18 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学习之变量的使用
2011/05/29 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
详解Vue之事件处理
2020/07/10 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python追加元素到列表的方法
2015/07/28 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
python中int与str互转方法
2018/07/02 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
三八妇女节活动主持词
2014/03/17 职场文书
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
写给老师的感谢信
2015/01/20 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
国家助学金受助感言
2015/08/01 职场文书
人事任命书范本
2015/09/21 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
nginx之内存池的实现
2022/06/28 Servers
mysqldump进行数据备份详解
2022/07/15 MySQL