好的,在下面的方法中,它只提取引用的url,如下所示
解压代码:
foreach (HtmlNode link in hdDoc.DocumentNode.SelectNodes("//a[@href]"))
{
lsLinks.Add(link.Attributes["href"].Value.ToString());
}url代码
<a href="Login.aspx">Login</a>提取的url
Login.aspx但我想获得浏览器解析后的实际链接
http://www.monstermmorpg.com/Login.aspx我可以检查url是否包含http,如果不包含,则添加域值,但在某些情况下可能会导致一些问题,我认为这不是一个非常明智的解决方案。
c# 4.0、HtmlAgilityPack.1.4.0
发布于 2011-10-14 05:01:50
假设你有原始的url,你可以像这样组合解析后的url:
// The address of the page you crawled
var baseUrl = new Uri("http://example.com/path/to-page/here.aspx");
// root relative
var url = new Uri(baseUrl, "/Login.aspx");
Console.WriteLine (url.AbsoluteUri); // prints 'http://example.com/Logon.aspx'
// relative
url = new Uri(baseUrl, "../foo.aspx?q=1");
Console.WriteLine (url.AbsoluteUri); // prints 'http://example.com/path/foo.aspx?q=1'
// absolute
url = new Uri(baseUrl, "http://stackoverflow.com/questions/7760286/");
Console.WriteLine (url.AbsoluteUri); // prints 'http://stackoverflow.com/questions/7760286/'
// other...
url = new Uri(baseUrl, "javascript:void(0)");
Console.WriteLine (url.AbsoluteUri); // prints 'javascript:void(0)'注意AbsoluteUri的使用,而不是依赖于ToString(),因为ToString解码URL (使其更“人类可读”),这是,而不是通常是您想要的。
发布于 2011-10-14 04:58:29
我可以检查url是否包含http,如果不包含,则添加域值
这就是你应该做的。Html Agility Pack在这方面没有任何帮助:
var url = new Uri(
new Uri(baseUrl).GetLeftPart(UriPartial.Path),
link.Attributes["href"].Value)
); https://stackoverflow.com/questions/7760286
复制相似问题