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 相关文章推荐
文件上传类
Oct 09 PHP
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
PHP 登录记住密码实现思路
May 07 PHP
深入PHP数据加密详解
Jun 18 PHP
php跨域cookie共享使用方法
Feb 20 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
PHP查询快递信息的方法
Mar 07 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
Laravel如何使用Redis共享Session
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上传文件的增强函数
2010/07/21 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
python 读取文件并替换字段的实例
2018/07/12 Python
详解python-图像处理(映射变换)
2019/03/22 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
什么是Python中的匿名函数
2020/06/02 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
实习自我鉴定
2013/12/15 职场文书
环保倡议书100字
2014/05/15 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
生产车间管理制度
2015/08/04 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
排查并解决MySQL生产库内存使用率高的报警
2022/04/11 MySQL