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 來的。
沒有留言:
張貼留言