2008-12-11 96 views
1

我正在編寫一個基本的爬網程序,它簡單地使用PHP緩存頁面。PHP中的網頁爬蟲鏈接/頁面邏輯

它所做的就是用get_file_contents得到一個網頁和正則表達式的內容,讓所有的環節出<a href="URL">DESCRIPTION</a> - 此刻它返回:

Array { 
[url] => URL 
[desc] => DESCRIPTION 
} 

我有是找出邏輯問題確定頁面鏈接是否是本地的,或確定它是否可能位於完全不同的本地目錄中。

它可以是任何數量的組合:即href="../folder/folder2/blah/page.html"href="google.com"href="page.html" - 可能性是無止境的。

什麼是正確的算法來解決這個問題?我不想丟失任何重要的數據。

回答

3

首先,正則表達式和HTML不混合。用途:

可能去你的網站外
foreach(DOMDocument::loadHTML($source)->getElementsByTagName('a') as $a) 
{ 
    $a->getAttribute('href'); 
} 

鏈接與協議或//開始,即

http://example.com 
//example.com/ 

href="google.com"是鏈接到本地​​文件。

但是,如果您想創建網站的靜態副本,爲什麼不使用wget

0

你必須在href中查找http://。否則,您可以確定它是以./開頭還是以「./」的任意組合。如果你沒有找到「/」,那麼你將不得不假定它是一個文件。你想爲這個腳本嗎?

+0

當然,這將是一個很大的幫助! :) – atomicharri 2008-12-12 01:53:11

1

我們首先考慮本地鏈接的屬性。

這些可能是:

  • 相對沒有方案和沒有主機,或
  • 絕對用的 'http' 或 'https' 一個方案和主機 與運行腳本的機器

這就是您需要確定鏈接是否爲本地鏈接的所有邏輯。

使用parse_url功能分離出不同成分的URL來識別方案主機

+0

要小心parse_url它很容易失敗:P – 2008-12-27 03:23:42