我编写了以下代码来解析给定页面的超链接。
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字符串。
任何改进上述代码的建议也会有所帮助。
感谢您的时间。
答案 0 :(得分:1)
您应该使用解析器。使用最广泛的是HtmlAgilityPack。使用它,您可以将HTML作为DOM进行交互。
答案 1 :(得分:1)
假设您正在处理格式良好的XHTML,您可以简单地对待 文本作为XML文档。该框架加载了功能 完全按照你的要求去做。
http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx
答案 2 :(得分:1)
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();