zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP采集静态页面并把页面css,img,js保存的方法

JSPHP静态方法CSS 页面 保存 采集
2023-06-13 09:15:37 时间

本文实例讲述了PHP采集静态页面并把页面css,img,js保存的方法。分享给大家供大家参考。具体分析如下:

这是一个可以获取网页的html代码以及css,js,font和img资源的小工具,主要用来快速获取模板,如果你来不及设计UI或者看到不错的模板,则可以使用这个工具来抓取网页和提取资源文件,提取的内容会按相对路径来保存资源,因此你不必担心资源文件的错误url导入.

首页index.php,代码如下:

复制代码代码如下:
<!DOCTYPEhtml>
<html>
<head>
<metaname="author"content="flute"/>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>网页抓取器</title>
<linkrel="stylesheet"href="main.css"media="all"/>
<scripttype="text/javascript"src="jquery.js"></script>
<scripttype="text/javascript"src="main.js"></script>
</head>
<body>
<h1>WebGrabber</h1>
<hr/>
<divclass="box">
 <h2>Url</h2>
 <divclass="form">
   <inputtype="text"id="project"value="projectname"/>
   <inputtype="text"id="url"value="http://"size="60"/>
   <buttonclass="submit"type="button">Get</button><spanid="tip"></span>
 </div>
</div>
<divclass="box">
 <spanclass="all"id="saveall">SaveAll</span>
 <h2>List</h2>
 <ulid="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);
 echojson_encode(grab($_POST["url"]));
 }
 
 functiongrab($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;
 }

 functionvardump($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.点击SaveAll即可保存列表中所有的文件,并按相对路径生成;

5.如果网页上有http远程文件,将会直接保存在http文件夹下;

6.Get和Save有时会失败,没关系重试几次即可。

希望本文所述对大家的php程序设计有所帮助。