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文件上传实例详解!!!
Jan 02 PHP
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
PHP面向对象精要总结
Nov 07 PHP
PHP中Http协议post请求参数
Nov 02 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
php workerman定时任务的实现代码
Dec 23 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
Oct 16 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
数据库的日期格式转换
2006/10/09 PHP
SMARTY学习手记
2007/01/04 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
bootstrap table小案例
2016/10/21 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
python绘制规则网络图形实例
2019/12/09 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
delegate与普通函数的区别
2014/01/22 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
护士自我评价
2014/02/01 职场文书
承诺书的格式范文
2014/03/28 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
计生个人工作总结
2015/02/28 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
创业计划书之校园超市
2019/09/12 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript