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获取网页内容方法总结
Dec 04 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
PHP+ACCESS 文章管理程序代码
Jun 21 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
ini_set的用法介绍
Jan 07 PHP
php汉字转拼音的示例
Feb 27 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP基于yii框架实现生成ICO图标
Nov 13 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
php四种定界符详解
Feb 16 PHP
php 读取文件夹下所有图片、文件的实例
Oct 17 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
Javascript 陷阱 window全局对象
2008/11/26 Javascript
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
js判断是否是手机页面
2017/03/17 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
项目施工员岗位职责
2014/03/09 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python