2010-10-08 152 views
3

今天我在讀這個article。說實話,我真的很想要「2.你的許多內容是由諸如PHP或ASP.NET的服務器端技術創建的」。爬行器的HTML快照 - 瞭解它如何工作

我想知道如果我明白:)

我創建一個PHP腳本(gethtmlsnapshot.php),其中i包括服務器端AJAX頁面(訪問getdata.php)和我逃(安全)的參數。然後我將它添加到html靜態頁面(index-movies.html)的末尾。對?現在...

1 - 我把那個gethtmlsnapshot.php?換句話說,我需要打電話(或者更好,爬蟲需要)該頁面。但是,如果我在主頁面上沒有鏈接,抓取工具就無法調用它:O抓取工具如何使用_escaped_fragment_參數調用頁面?它不能知道他們,如果我沒有具體說明他們的地方:)

2 - 如何可以乘員調用該參數的頁面?和以前一樣,我需要使用參數鏈接到該腳本,因此乘員瀏覽每個頁面並保存動態結果的內容。

你能幫我嗎?你對這種技術有什麼看法?如果爬蟲的開發者以其他方式做自己的機器人,會不會更好? :)

讓我知道你有什麼想法。乾杯

回答

8

我想你有什麼問題,所以我會試着解釋這裏發生了什麼,包括背景和選擇。因爲這確實是我們大多數人不時偶然發現的(或至少類似的)非常重要的話題。

使用AJAX或者更確切地說是異步增量頁面更新(因爲大多數頁面實際上不使用XML而是使用JSON),豐富了網頁並提供了很好的用戶體驗。

但它也有代價。

主要問題是客戶端根本不支持xmlhttpget對象或JavaScript。 一開始你必須提供向後兼容性。 這通常是通過提供鏈接並捕獲onclick事件並啓動AJAX調用來完成的,而不是重新加載頁面(如果客戶端支持它)。

今天幾乎每個客戶端都支持必要的功能。

所以今天的問題是搜索引擎。因爲他們沒有。那麼這不完全是真的,因爲他們部分地(尤其是谷歌),但爲了其他目的。 谷歌評估某些JavaScript代碼,以防止黑帽SEO(例如,一個鏈接指向某處,但JavaScript會打開一些完全不同的網頁......或者是客戶端不可見的HTML關鍵字代碼,因爲它們被JavaScript刪除或其他方式) 。

但保持簡單,最好考慮一個非CSS或JS支持的非常基本的瀏覽器的搜索引擎爬行程序(對於CSS,其派對由於特殊原因進行了解析)。

因此,如果您的網站上有「AJAX鏈接」,並且Webcrawler不支持使用JavaScript跟蹤它們,則它們只是不會被抓取。或者他們呢? 那麼答案是JavaScript鏈接(就像document.location什麼的)得到遵循。谷歌通常足夠聰明地猜測目標。 但阿賈克斯調用不是。因爲他們返回部分內容,並且由於上下文未知,並且唯一的URI不代表內容的位置,所以它不能構建有意義的整個頁面。

所以基本上有3個策略來解決這個問題。

  1. 對正常href屬性作爲後備的鏈接onclick事件通過你的站點地圖(IMO是最好的選擇,因爲它解決了客戶,以及搜索引擎的問題)
  2. 提交內容的網站,使他們獲得索引,而是徹底離開你的網站的鏈接(通常是頁提供了一個固定鏈接到這個網址,以便外部頁面鏈接他們的網頁級別)
  3. AJAX抓取方案

的想法是讓你的JavaScript xmlhttpget請求糾結與通信荷蘭國際集團,看起來像這樣的href屬性: www.example.com/ajax.php#!key=value

這樣的鏈接看起來像:

<a href="http://www.example.com/ajax.php#!page=imprint" onclick="handleajax()">go to my imprint</a> 

功能handleajax可以評估document.location變量火增量異步頁更新。它也有可能通過一個ID或網址或其他。

履帶但承認AJAX檢索機制格式,並自動獲取http://www.example.com/ajax.php.php?%23!page=imprint而不是http://www.example.com/ajax.php#!page=imprint 所以你的查詢字符串,然後contanis的HTML片段,您可以從中分辨出哪部分內容進行了更新。 所以你只需要確保http://www.example.com/ajax.php.php?%23!page=imprint返回一個完整的網站,看起來像網站在xmlhttpget更新後應該看到用戶。

一個非常優雅的解決方案也是將一個對象本身傳遞給處理函數,該函數然後獲取相同的URL,因爲爬蟲將使用ajax獲取但使用其他參數。然後,您的服務器端腳本將決定是發送整個頁面還是僅發送部分內容。

這確實是一個非常有創意的辦法,這纔是我的個人公關/ CON分析:

親:

  • 局部更新頁面獲得一個唯一的標識符,在這一點上,他們完全有資格資源的語義網絡
  • 部分更新網站收到可以通過搜索引擎

CON呈現一個唯一的標識符:

  • 它沒有JavaScript
  • 它提供了黑帽SEO的機會,搜索引擎只是一個備用的解決方案,而不是客戶。所以谷歌肯定不會完全採用它,或者用這種技術對頁面進行排名,並且沒有對內容進行適當的驗證。

結論:

  • 與後備遺產工作的href屬性只是平常的鏈接,而是一個onclick處理程序是一個更好的辦法,因爲他們爲舊瀏覽器提供的功能。

  • ajax抓取方案的主要優點是部分更新的網站獲得唯一的URI,並且您不必創建重複的內容,以某種方式作爲可索引和可​​鏈接的對象。

  • 你可能會認爲ajax抓取方案的實現更加一致並且更容易實現。我認爲這是你的應用程序設計的問題。

+0

OHHH!現在很清楚它是如何工作的! :)非常感謝的人!我不明白爬蟲是如何獲得頁面的鏈接的。現在我明白了,我把它們放在href鏈接上。是的,它應該起作用!這是一個偉大的「escamotage」!但我認爲它是一個很好的技巧,而不是Web 2.0的SEO的真正解決方案。 :)但確定,它似乎有效!只有最後一件事:只有瀏覽器在href之前評估onclick事件(但我認爲所有事情都這樣做),這纔有效。謝謝喬,你真的幫我:) – markzzz 2010-10-11 15:06:28

+0

和對不起我的廢話英語:) – markzzz 2010-10-11 15:07:09