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 相关文章推荐
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
php 不使用js实现页面跳转
Feb 11 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
php网页版聊天软件实现代码
Aug 12 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 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
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
Python简单I/O操作示例
2019/03/18 Python
python打包成so文件过程解析
2019/09/28 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
企划主管岗位职责
2013/12/12 职场文书
小学生成长感言
2014/01/30 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
青春寄语大全
2014/04/09 职场文书
化工专业求职信
2014/07/01 职场文书
给客户的感谢信
2015/01/21 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis