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在特殊字符前加斜杠的实现代码
Jul 17 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
Smarty实现页面静态化(生成HTML)的方法
May 23 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
php7性能提升的原因详解
Oct 13 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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的5个入手程序
2006/11/23 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
jquery remove方法应用详解
2012/11/22 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
常见的python正则用法实例讲解
2016/06/21 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
Python编写一个优美的下载器
2018/04/15 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
小学毕业感言500字
2014/02/28 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
投资意向协议书
2015/01/29 职场文书
预备党员个人总结
2015/02/14 职场文书
市场督导岗位职责
2015/04/10 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
利用Python判断你的密码难度等级
2021/06/02 Python
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL
Python torch.flatten()函数案例详解
2021/08/30 Python
nginx实现动静分离的方法示例
2021/11/07 Servers
微信小程序实现轮播图指示器
2022/06/25 Javascript