PHP采集静态页面并把页面css,img,js保存的方法


Posted in PHP onDecember 23, 2014

本文实例讲述了PHP采集静态页面并把页面css,img,js保存的方法。分享给大家供大家参考。具体分析如下:

这是一个可以获取网页的html代码以及css,js,font和img资源的小工具,主要用来快速获取模板,如果你来不及设计UI或者看到不错的模板,则可以使用这个工具来抓取网页和提取资源文件,提取的内容会按相对路径来保存资源,因此你不必担心资源文件的错误url导入.

首页 index.php,代码如下:

<!DOCTYPE html> 

<html> 

<head> 

<meta name="author" content="flute" /> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>网页抓取器</title> 

<link rel="stylesheet" href="main.css" media="all" /> 

<script type="text/javascript" src="jquery.js"></script> 

<script type="text/javascript" src="main.js"></script> 

</head> 

<body> 

<h1>Web Grabber</h1> 

<hr /> 

<div class="box"> 

  <h2>Url</h2> 

  <div class="form"> 

    <input type="text" id="project" value="projectname" /> 

    <input type="text" id="url" value="http://" size="60" /> 

    <button class="submit" type="button">Get</button><span id="tip"></span> 

  </div>

</div> 

<div class="box"> 

  <span class="all" id="saveall">Save All</span> 

  <h2>List</h2> 

  <ul id="list"> 

  </ul> 

</div> 

</body> 

</html>

抓取页面代码 grab.php,代码如下:
<?PHP 

 /* 

 * flute 

 * 2014/03/31 

 */ 

 

 if(isset($_POST['url'])) { 

  if(isset($_POST['project']) && !is_dir($_POST['project'])) mkdir($_POST['project'], 0777); 

  echo json_encode(grab($_POST['url'])); 

 } 

 

 function grab($url) { 

  //$url = 'http://ldixing-wordpress.stor.sinaapp.com/uploads/leaves/test.html'; 

  $data = array(); 

  $file = preg_replace('/^.*//', '', $url); 

 

  if(($content = file_get_contents($url)) !== false) { 

 

   if(isset($_POST['project'])) file_put_contents($_POST['project'].'/'.$file, $content); 

 

   $pattern = '/<link.*?href=('|")(.*?.css)1.*?>/i'; 

   if(preg_match_all($pattern, $content, $matches)) { 

    $data['css'] = $matches[2]; 

   } 

 

   $pattern = '/<script.*?src=('|")(.*?.js)1.*?>/i'; 

   if(preg_match_all($pattern, $content, $matches)) { 

    $data['js'] = $matches[2]; 

   } 

 

   $pattern = '/<img.*?src=('|")(.*?)1.*?>/i'; 

   if(preg_match_all($pattern, $content, $matches)) { 

    $data['img'] = $matches[2]; 

   } 

 

   $pattern = '/url(('|"|s)(.*?)1)/i'; 

   if(preg_match_all($pattern, $content, $matches)) { 

    $data['src'] = $matches[2]; 

   } 

  } 

 

  return $data; 

 }
 function vardump($obj) { 

  echo '<pre>'; 

  print_r($obj); 

  echo '</pre>'; 

 } 

?>

保存css,js,img等资源的页面 save.php,代码如下:
<?PHP 

 /* 

 *  flute 

 *  2014/03/31 

 */ 

 

 if(isset($_POST['url']) && isset($_POST['project']) && isset($_POST['domain'])) { 

  extract($_POST); 

  $url = preg_replace('/?.*$/', '', $url); 

  $file = $url; 

  $arr = explode('/', $file); 

  $length = sizeof($arr); 

  $filename = $arr[$length - 1]; 

  $root = $project; 

  $dir = $root; 

 

  if($domain == 'http') { 

   $dir = $root.'/http'; 

   if(!is_dir($dir)) mkdir($dir, 0777); 

  } else { 

   $file = $domain.'/'.$url; 

   for($i = 0; $i < $length -1; $i++) { 

    if(!emptyempty($arr[$i])) { 

     $dir .= '/'.$arr[$i]; 

     if(!is_dir($dir)) mkdir($dir, 0777); 

    }

   } 

  } 

  if(!file_exists($dir.'/'.$filename) || filesize($dir.'/'.$filename) == 0) { 

   $content = file_get_contents($file); 

   file_put_contents($dir.'/'.$filename, $content); 

  } 

 } 

?>

使用方法:

1. 打开index页,输入项目名和要抓取的网址,网址必须是文件名结尾,如index.html;

2. 点Get按钮,得到当前页面所有的css,js,img等资源列表;

3. 点击css链接会获取css文件中的背景资源图片,附加在列表后头;

4. 点击Save All即可保存列表中所有的文件,并按相对路径生成;

5. 如果网页上有http远程文件,将会直接保存在http文件夹下;

6. Get和Save有时会失败,没关系重试几次即可。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP安装问题
Oct 09 PHP
转换中文日期的PHP程序
Oct 09 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
php自动加载机制的深入分析
Jun 08 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
PHP的几个常用加密函数
Feb 03 PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 #PHP
php获取QQ头像并显示的方法
Dec 23 #PHP
关于URL最大长度限制的相关资料查证
Dec 23 #PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 #PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 #PHP
php天翼开放平台短信发送接口实现方法
Dec 22 #PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 #PHP
You might like
一个PHP日历程序
2006/12/06 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
解决Python传递中文参数的问题
2015/08/04 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
python实现邮件循环自动发件功能
2020/09/11 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
2015年国庆晚会主持词
2015/07/01 职场文书
2015中秋祝酒词
2015/08/12 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
MySQL infobright的安装步骤
2021/04/07 MySQL
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript