如何使用C#修復格式錯誤的HTML?一個很好的答案是HTML Agility Pack樣本!


我正在抓一個網站(合法使用)。該網站的HTML是可以的,但有一些惱人的問題。

我可以採用的一種方式是通過正則表達式。我使用Expression Web來分析糾正它們所需的問題和正則表達式。因此,一種方法是使用RegexBuddy等工具為這些正則表達式生成C#代碼。

但是,在C#中處理格式錯誤的HTML的推薦工具是HTML Agility Pack (HAP)。此外,我只分析了一些頁面,我擔心未來的頁面將包含我尚未解決的模式,我不想進入“在接下來的幾頁中找到錯誤並糾正它們”維護商業。因此,如果HAP已經擁有一個可靠的,始終可用的解決方案,那就太棒了。問題是,除了在SO的一些提及之外我找不到這個工具的任何使用文檔,除了逐個對象的API幫助文件。

所以 - 在我花費$並在RegexBuddy上學習時間(沒有免費評估版)之前,或者在HAP的API文檔上打破我的意思 - 是否有一種簡單的方法可以做到這一點? HAP樣本會有所幫助... :-)

一般承認的答案

我從這裡得到的答案:1)如果您正在抓取一個您無法控制的網站,您將始終進入維護模式,每當您正在抓取的頁面佈局發生變化時,您必須修復您的刮刀。 2)如果您僅限於此已知站點,為什麼不編寫刮刀來調整問題

所以,如果我必須進入維護模式,它應該盡可能簡單。因此,我的流程如下:

  1. 我使用Webius的SWExplorerAutomation來檢測網頁中的場景。想法是,Scene是您為IE定義的條件集合。當加載網頁時,IE會嘗試查看滿足哪些條件(例如 - 頁面標題為“帳戶登錄”,頁麵包含“登錄”文本框和“密碼”文本框)。如果檢測到與場景對應的一組條件,則IE報告已檢測到場景。此模型提供了一個抽象層 - 網頁中的某些更改可以轉換為場景文件中的更改,從而使代碼不必更改。此外,這使我免受IE的事件驅動模型的影響:我稱之為“場景。我正在評估這個產品,但我還不確定我會使用它,主要是因為文檔很糟糕。另一種選擇是Watin ,還有一個我尚未購買SWEA的原因是這篇文章指責其作者反對Watin發送垃圾郵件。
  2. 獲取網頁後,我使用Expression Web運行兼容性檢查並識別錯誤。
  3. 我使用RegexMagic來刪除和糾正錯誤。我真的很喜歡這個工具。當然,有時它會讓你生氣,因為它不會讓你做一些非常簡單的事情,但它是一個甜蜜,甜蜜的工具,而且文檔很棒。
  4. 最後,在我知道的所有錯誤都得到糾正後,我使用HTML Agility Pack轉換為XHTML - 交叉ts並點擊is,可以這麼說:所有小寫,引用跨屬性,等等。

希望這可以幫助!

阿維


熱門答案

你能告訴我你有什麼煩人的問題嗎?
但是您不需要使用正則表達式來清理html,HAP將允許您使用Xpath查詢訪問格式錯誤的html的元素。
基本上你需要學習Xpath以了解如何獲得你想要的html元素。
它實際上取決於您使用HAP解析的html的類型。
但有幾種方法可以獲得這些元素。
比如id或class,甚至可以獲得包含給定文本的另一個元素的元素,例如“name:”。
你可以轉到W3學校的Xpath教程,獲得一個很好的xpath教程




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因