2013-08-05 57 views
0

我希望有人能幫助我解決這個問題。我正在用PHP編寫一個蜘蛛應用程序,它編譯來自域的唯一URL列表,處理每個唯一URL上的HTML數據,然後生成關於這些頁面的統計數據。如何確定具有不同參數值的URL是否「唯一」?

我的問題與知道我的蜘蛛網是否真的是唯一的我的列表,更具體地說,當參數值不同時有關。

舉個例子,這裏有我的蜘蛛收集兩個URL在技術上獨一無二的(對於「replytocom」不同的參數值),也可直接到同一頁:

這些鏈接是您在博客上發現的那種,可以更輕鬆地回覆特定評論,同時仍使用相同的回覆表單。這是我的問題出現的地方:它們都是同一頁面的URL,這是我不想重新處理的數據(我真的只想要原始頁面的URL進行處理)。對於在所有評論部分中使用這些鏈接的博客,這對我的蜘蛛來說都是一個大數據問題。

我的問題是:有沒有辦法判斷兩個不同參數值的鏈接是否引用同一個頁面?讓我想知道的是,例如,具有不同參數值的YouTube視頻確實意味着不同的頁面。我自己打開網頁並檢查的缺點是,有沒有一種編程方式來判斷兩個URL是否加載了相同的頁面?

我真的很感謝這方面的幫助!

回答

2

網頁是supposed to包括<meta rel="canonical">標籤回答這個問題給你。
如果存在,這將指定此頁面的「官方」URL;它對於同一頁面的不同URL應該是相同的。

如果此標籤不存在,那麼您的運氣不佳。

+0

的確。在有問題的頁面上,[規範鏈接](http://en.wikipedia。org/wiki/Canonical_link_element)設置爲http://eatocracy.cnn.com/2013/08/02/fda-sets-gluten-free-labeling-standards/,即沒有參數的裸露網址,這似乎有意義在這種情況下。 –

+0

非常感謝您的回答。希望大部分我抓到的網站都會對搜索引擎友好。規範的鏈接至少可以幫助我減少遇到的數據重新處理的數量,無論何時可用。再次感謝! –

1

不,沒有辦法告訴。參數(在?之後和#之前)被傳遞給Web服務器,它取決於Web服務器對它們的處理方式,以及它們是否影響返回的頁面。

(在#後片不給服務器,並且可以在不影響HTML服務器返回,但可能由JavaScript來修改頁面被用戶看到。)

0

不,即使在您的示例中,頁面正在更改,以便表單標識您點擊了要回復的人。

網絡服務器可以根據您在請求中傳遞的參數(?之後和#之前的項目)做它喜歡的事情。

#後面的字符串表示瀏覽器應滾動到的頁面上的錨點。

0

這應該工作

function PagesAreIdentical($pointer1, $pointer2) { 
    $headerArray1 = get_headers($pointer1); 
    $headerArray2 = get_headers($pointer2): 
    if($headerArray1['Content-Length'] == $headerArray2['Content-Length']) 
    { 
     if(file_get_contents($pointer1) != file_get_contents($pointer2)) 
      return false; 
     else 
      return true; 
    } 

    else return false; 
} 
相關問題