如何使用Html Agility Pack獲取img / src或/ hrefs?

.net c# html html-agility-pack html-parsing

我想使用HTML敏捷包來解析HTML頁面中的圖像和href鏈接,但我對XML或XPath不太了解。雖然在許多網站上查找幫助文檔,但我無法解決問題。另外,我在VisualStudio 2005中使用C#。我只是不能流利地說英語,所以,我將真誠地感謝能夠寫一些有用的代碼。

一般承認的答案

主頁上的第一個示例非常相似,但請考慮:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

所以你可以想像,對於img @ src,只需用img替換每個a ,用src替換href 。您甚至可以簡化為:

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    string href = link["href"].Value;
    // store href somewhere
 }

對於相對URL處理,請查看Uri類。


熱門答案

示例和接受的答案是錯誤的。它不能使用最新版本進行編譯。我嘗試別的東西:

    private List<string> ParseLinks(string html)
    {
        var doc = new HtmlDocument(); 
        doc.LoadHtml(html);
        var nodes = doc.DocumentNode.SelectNodes("//a[@href]");
        return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
               r => r.Attributes.ToList().ConvertAll(
               i => i.Value)).SelectMany(j => j).ToList();
    }

這對我有用。




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