2010-04-20 57 views
0

我的任務是編寫一個程序,給定一個搜索字詞和代表某個未知搜索引擎搜索結果的頁面的HTML源代碼(它可以是任何東西,博客,商店,谷歌,eBay ,...)需要建立包含「結果內容」的結果的數據結構:搜索結果的標題,「詳細信息」鏈接,結果中的位置等。不知道結果頁面包含任何數據,以及是否有任何搜索結果。目標是將數據結構提供給另一個提取含義的程序。解讀搜索結果

我在找的不是BeautifulSoup或RegExp,而是一些關於如何解釋HTML源代碼的聰明想法或算法。我該怎麼做才能找出頁面的哪一部分構成單個結果項目?如何過濾標記噪聲以提取重要的位?你會怎麼做?指向研究領域的研究領域包括我非常感謝的嘗試。

謝謝,西蒙

回答

0

我懷疑存在銀子彈算法,無需任何培訓只會在任意搜索查詢輸出工作。

然而,這個任務可以解決,並在許多應用程序中實際解決,但以不同的方法。首先,您必須根據您實際要使用的內容(可能是名稱,日期,鏈接,描述片段等)定義單個搜索結果項的一般結構,然後編寫將提取必要的html解析器的數量必需的字段來自特定網站的搜索結果輸出。

我知道這不是超級性感的解決方案,但它可能是唯一有效的解決方案。這不是火箭科學。編寫解析器實際上非常簡單,你可以每天打十幾個。如果您將查看搜索結果的html源代碼,您會注意到輸出結果通常非常結構化並標有特定div部分或屬性,因此在文檔中很容易找到它。你甚至沒有使用任何複雜的HTML解析庫,grep-like就足夠了。

例如,在這個特定頁面上,您的問題始於<div class="post-text">並以</div>結尾。它們之間的所有內容實際上都是帶有一些HTML格式的文本文本,您可能希望刪除其中的多餘空格和「\ n」。而這個<div class="post-text">只出現在頁面上一次。

一旦您大規模地使用您的檢索應用程序,您會發現在不同網站上沒有大量不同的搜索引擎,並且您將能夠重新使用已創建的解析器,搜索引擎。

你必須記住的唯一事情就是內置的自我測試。網站往往會不時升級和改變設計。如果您的應用程序要存活一段時間,則需要在解析器中包含一些邏輯來檢查其結果的有效性,並在每次搜索輸出已更改且不再與解析器兼容時通知您。然後,您將不得不修改特定的解析器或編寫新的解析器。

希望這會有所幫助。