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下网站防IP攻击代码,超级实用
Oct 24 PHP
PHP 面向对象详解
Sep 13 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
smarty自定义函数用法示例
May 20 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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伪静态写法附代码
2008/06/20 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
php实现每日签到功能
2018/11/29 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
php intval函数用法总结
2019/04/14 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
Position属性之relative用法
2015/12/14 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
Python中的元类编程入门指引
2015/04/15 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
python实现百度语音识别api
2018/04/10 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
pytorch逐元素比较tensor大小实例
2020/01/03 Python
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
计划生育标语
2014/06/23 职场文书
支部书记四风问题自我剖析材料
2014/09/29 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js