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图片验证码代码
Mar 27 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php提交表单发送邮件的方法
Mar 20 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
php-msf源码详解
Dec 25 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
PHP使用非对称加密算法RSA
Apr 21 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
[01:46]2018完美盛典章节片——坚守
2018/12/17 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python中安装easy_install的方法
2018/11/18 Python
python plotly绘制直方图实例详解
2019/07/22 Python
tensorflow 查看梯度方式
2020/02/04 Python
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
实习护士自荐信
2014/06/21 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
校长个人总结
2015/03/03 职场文书
600字作文之感受大自然
2019/11/27 职场文书
nginx优化的六点方法
2021/03/31 Servers
python实现自动清理文件夹旧文件
2021/05/10 Python
Python进度条的使用
2021/05/17 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS