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 相关文章推荐
第一节--面向对象编程
Nov 16 PHP
Php Mssql操作简单封装支持存储过程
Dec 11 PHP
input file获得文件根目录简单实现
Apr 26 PHP
php调用shell的方法
Nov 05 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 PHP
详解PHP中mb_strpos的使用
Feb 04 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 PHP
php测试kafka项目示例
Feb 06 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 中的str_replace 函数总结
2007/04/27 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
vue+iview实现分页及查询功能
2020/11/17 Vue.js
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python实践项目之监控当前联网状态详情
2019/05/23 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
波兰购物网站:MALL.PL
2019/05/01 全球购物
保证书范文大全
2014/04/28 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis