2017年12月28日 星期四

CODE_Review Queue 運用於將網頁靜態化

Queue 最簡單的方式當然就是從尾加進去,從頭拿出來

為了要將一個網站下的所有網頁抓下來,首先第一步就是要把所以要抓的網頁找出來 (檔案應該也是啦)


AddPage('index.html);

While NOT Empty {
   $page = get_page();
   $urls = parser_page($page);
   foreach ($urls as $url) {
           if (NOT IN queue) AddPage($url);
   }
   move pointer to next
}


在Queue中沒有排序,所以要檢查 是否符合 (NOT IN queue) 當網頁數增加很多時,花費的時間就會多。

底下適實作

以$urls為Queue
$urls=array();
加入Queue時檢查是否已在
function addurl($s) {
  global $urls;
  $s=str_replace('&','&',$s);
  if (count($urls)==0) {
     $urls[]=$s;
  }else {
     $find=false;
     foreach($urls as $a) {
       if ($a==$s) {
          $find=true;
          break;
       }
     }
     if (!$find) {
       $urls[]=$s;
     }
 
  }
  }

找出網頁中的 url

function findurl($url) {
  global $doc, $urls, $sysVar;
  $xml = file_get_contents($url);
  $doc->load($xml);

     $links = $doc->find("a");

     foreach ( $links as $l ) {
         //echo $l->href.'<br/>';
         $href = $l->href;
         if ($href == $sysVar['path']) $href= $sysVar['path'].'/';
         if ( substr($href,0,7)== ($sysVar['path'].'/') ) {
             $ext = substr($href,-4);
             if ($ext !='.zip' || $ext !='.pdf' || .....) {
               addurl("{$sysVar['protocol']}{$sysVar['host']}".$href);
             }
         }
     }
  }

$doc 是由 simple_html_dom() 建立的物件,從 simple_html_dom.php 來的。

沒有留言:

張貼留言