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聊天室技术
Oct 09 PHP
模仿OSO的论坛(二)
Oct 09 PHP
第十四节--命名空间
Nov 16 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 PHP
PHP生成zip压缩包的常用方法示例
Aug 22 PHP
Laravel Eloquent ORM 多条件查询的例子
Oct 10 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 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
php class类的用法详细总结
2013/10/17 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
python实现多层感知器
2019/01/18 Python
python实现剪切功能
2019/01/23 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
师范毕业生求职自荐信
2013/09/25 职场文书
英文版区域经理求职信
2013/10/23 职场文书
个人违纪检讨书
2014/09/15 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
社区综治工作汇报
2014/10/27 职场文书
实习介绍信模板
2015/01/30 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
app场景下uniapp的扫码记录
2022/07/23 Java/Android