从网页解析超链接

时间:2012-09-26 21:48:49

标签: c# asp.net

我编写了以下代码来解析给定页面的超链接。

    WebClient web = new WebClient();
    string html = web.DownloadString("http://www.msdn.com");
    string[] separators = new string[] { "<a ", ">" };
    List<string> hyperlinks= html.Split(separators, StringSplitOptions.None).Select(s =>
    {
        if (s.Contains("href"))
            return s;
        else
            return null;
    }).ToList();

虽然仍需要调整字符串拆分以完美返回网址。我的问题是有一些数据结构,在XmlReader左右,它可以有效地读取HTML字符串。

任何改进上述代码的建议也会有所帮助。

感谢您的时间。

4 个答案:

答案 0 :(得分:1)

您应该使用解析器。使用最广泛的是HtmlAgilityPack。使用它,您可以将HTML作为DOM进行交互。

答案 1 :(得分:1)

  

假设您正在处理格式良好的XHTML,您可以简单地对待   文本作为XML文档。该框架加载了功能   完全按照你的要求去做。

     

http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx

Does .NET framework offer methods to parse an HTML string?

答案 2 :(得分:1)

尝试HtmlAgilityPack

        HtmlWeb hw = new HtmlWeb();
        HtmlDocument doc = hw.Load("http://www.msdn.com");
        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
        {
            Console.WriteLine(link.GetAttributeValue("href", null));         
        }

这将打印出您网址上的每个链接。

如果要将链接存储在列表中:

 var linkList = doc.DocumentNode.SelectNodes("//a[@href]")
               .Select(i => i.GetAttributeValue("href", null)).ToList();

答案 3 :(得分:0)

重构,

        var html = new WebClient().DownloadString("http://www.msdn.com");
        var separators = new[] { "<a ", ">" };
        html.Split(separators, StringSplitOptions.None).Select(s => s.Contains("href") ? s : null).ToList();