AngleSharp是一個.NET庫,它使您能夠基於HTML,SVG和MathML等基於角度支架的超文本。庫也支持沒有驗證的XML。 Anglesharp的一個重要方面是CSS也可以解析。隨附的解析器建立在官方的W3C規格上。這會產生給定源代碼的完美便攜式HTML5 DOM表示形式,並確保與常綠瀏覽器的結果兼容。還有標準的DOM功能,例如querySelector或querySelectorAll工作,用於樹遍歷。
⚡⚡從Anglesharp遷移0.9到Anglesharp 0.10或更高版本(包括1.0)?查看我們的遷移文檔。 ⚡⚡
BrowsingContext就像一個瀏覽器選項卡 - 從.NET控制!)。與HTMLagilityPack這樣的類似庫的優勢是,暴露的DOM使用官方的W3C指定的API,即,即使是querySelectorAll之類的東西也可以在Anglesharp中使用。同樣,解析器使用HTML 5.1規範,該規範定義了錯誤處理和元素校正。 Anglesharp庫側重於標準符合性,互動性和可擴展性。因此,它使Web開發人員從任何現代瀏覽器中使用DOM所知道的所有可能性都可以使用C#。
Anglesharp的性能非常接近瀏覽器的性能。即使是非常大的頁面也可以在毫秒內處理。 Anglesharp試圖最大程度地減少內部內部記憶分配和重用元素,以避免不必要的對象創建。
這個簡單的示例將使用Wikipedia的網站進行數據檢索。
var config = Configuration . Default . WithDefaultLoader ( ) ;
var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes" ;
var context = BrowsingContext . New ( config ) ;
var document = await context . OpenAsync ( address ) ;
var cellSelector = "tr.vevent td:nth-child(3)" ;
var cells = document . QuerySelectorAll ( cellSelector ) ;
var titles = cells . Select ( m => m . TextContent ) ;或與明確類型相同的相同:
IConfiguration config = Configuration . Default . WithDefaultLoader ( ) ;
string address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes" ;
IBrowsingContext context = BrowsingContext . New ( config ) ;
IDocument document = await context . OpenAsync ( address ) ;
string cellSelector = "tr.vevent td:nth-child(3)" ;
IHtmlCollection < IElement > cells = document . QuerySelectorAll ( cellSelector ) ;
IEnumerable < string > titles = cells . Select ( m => m . TextContent ) ;在示例中,我們看到:
Anglesharp的每個集合都支持LINQ語句。 Anglesharp還為元素收集提供了許多有用的擴展方法,這些方法在官方DOM中找不到。
Anglesharp已被創建為.NET標準2.0兼容庫。這包括但不限於:
AngleSharp的文檔位於DOCS文件夾中。可以在那裡找到更多示例,最佳實踐和一般信息。該文檔還包含常見問題的列表。
通過遵循Wiki中提到的一些超級參考,還可以提供更多信息。深入的文章將在CodeProject上發表,並在Github的Wiki中放置鏈接。
該項目旨在將HTML,SVG,MATHML和CSS的W3C DOM的可靠實施到CLR中 - 全部用C#編寫。這個想法是,您基本上可以使用C#中的DOM進行所有操作,您可以在JavaScript(當然還有更多)。
即使有些人仍然會錯過其(完全指定 /正確的)實現,即使其中大多數部分都包括在內。 V1.0的目標是根據官方的W3C規範(Whatwg的有用擴展)實現所有實際相關零件。
API接近DOM4規範,但是,已調整命名以使用.NET約定。但是,要使AngleSharp對JavaScript引擎的屬性確實有用,請將屬性放置在相應的接口(以及方法,屬性等)上,以指示官方規範中的字段狀態。這允許使用官方API自動生成DOM對象。
這是一個長期的項目,最終將導致最重要的基於角度括號的超文本的最先進的解析器。
我們的希望是通過該項目圍繞網絡解析和圖書館建立一個社區。到目前為止,我們做出了巨大的貢獻,但是該目標尚未完全實現。想幫助嗎?與我們聯繫!
如果您知道Anglesharp當前缺少的某些功能,並且您願意實施該功能,那麼您的貢獻就非常歡迎!另外,如果您有一個很酷的主意 - 請不要害羞,我們想听聽。
如果您有一個想法如何改進API(或缺少的內容),則也歡迎帖子 /消息。例如,過去關於某些樣式(例如, HTMLDocument或HtmlDocument )一直在進行討論。最後,Anglesharp停止使用HTMLDocument (至少在庫外面可見)。現在,Anglesharp使用IDocument , IHtmlElement等名稱。沒有如此富有成效的討論,這種變化將是不可能的。
該項目總是在尋找其他貢獻者。即使您沒有任何代碼可以做出貢獻,而是改進的想法,錯誤報告或文檔中的錯誤。這些是使該項目保持活躍的貢獻。
實時討論可以在我們的吉特聊天中進行,該聊天支持使用GitHub帳戶。
在貢獻指南中可以找到更多信息。所有貢獻者都可以在貢獻者文件中找到。
該項目還採用了撰稿人盟約定義的行為準則,以闡明我們社區中的預期行為。
有關更多信息,請參見.NET基金會行為守則。
如果您經常使用Anglesharp,但是您沒有時間通過積極參與來支持該項目,那麼您仍然有興趣確保Anglesharp項目保持燈光。
因此,我們通過BountySource創建了一個背景模型。歡迎任何捐款,並受到非常感謝。我們將主要花錢在需要改進需要改進的近似值的專用開發時間上,並投資於.NET的Web Utility Eco-System(例如,在JavaScript引擎,其他解析器或Anglesharp的渲染器中,以提及一些出色的項目)。
請訪問Bountysource以獲取更多詳細信息。
Anglesharp以C#的最新版本編寫,因此需要Roslyn作為編譯器。建議在Windows上使用IDE(例如Visual Studio 2019+)。另外,VSCODE(具有全曲線或其他合適的語言服務器協議實現)應該是其他平台上的選擇工具。
該代碼試圖盡可能清潔。值得注意的是使用以下規則:
-Async後綴方法但是,更重要的是正確使用測試。任何新功能都應進行一組測試,以涵蓋功能並防止回歸。
存在一個非常詳細的更改。如果您只是對主要版本感興趣,請查看GitHub版本。
該項目得到了.NET基金會的支持。
Anglesharp使用MIT許可證發布。有關更多信息,請參見許可證文件。