C# 如何使用HtmlAgilityPack-C提取完整url#
好的,下面的方法是提取像这样的引用url 提取代码:C# 如何使用HtmlAgilityPack-C提取完整url#,c#,hyperlink,html-agility-pack,extraction,C#,Hyperlink,Html Agility Pack,Extraction,好的,下面的方法是提取像这样的引用url 提取代码: foreach (HtmlNode link in hdDoc.DocumentNode.SelectNodes("//a[@href]")) { lsLinks.Add(link.Attributes["href"].Value.ToString()); } url代码 <a href="Login.aspx">Login</a> 但我想得到浏览器解析后的真实链接 http://www.monstermm
foreach (HtmlNode link in hdDoc.DocumentNode.SelectNodes("//a[@href]"))
{
lsLinks.Add(link.Attributes["href"].Value.ToString());
}
url代码
<a href="Login.aspx">Login</a>
但我想得到浏览器解析后的真实链接
http://www.monstermmorpg.com/Login.aspx
我可以通过检查url是否包含http来完成,如果不包含,则添加域值,但在某些情况下可能会导致一些问题,我认为这不是一个非常明智的解决方案
c#4.0,HtmlAgilityPack.1.4.0
我可以检查url是否包含http,如果不包含,则添加域值
这就是你应该做的。Html Agility Pack在这方面没有任何帮助:
var url = new Uri(
new Uri(baseUrl).GetLeftPart(UriPartial.Path),
link.Attributes["href"].Value)
);
假设您拥有原始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(使其更“人类可读”),这不是你通常想要的。但是如果让我们假设爬网的url是:那么在这个问题中,我怎么才能得到真正的url?相对/根路径呢?如果有一个base
元素怎么办?@MonsterMMORPG它仍然有效-我已经用另一个元素更新了答案example@Oded关于
标记的观点很好,您还需要考虑这些标记。谢谢你的更新。所以这个baseurl是爬网url,对吗?还有一些链接包含非英语字符,我如何解决这个问题。我认为这是编码问题。谢谢,但让我们假设爬网的url是:-在这种情况下,我如何获取?@MonsterMMORPG,您可以使用var url=new Uri(new Uri(baseUrl).GetLeftPart(UriPartial.Path),link.Attributes[“href”].Value))代码>。您的语法不正确,现在可以解决此问题。因此,它不工作,并给出错误。此外,基本URL是指在解析文档中存在“<代码>基< /COD>元素”,以及路径是否是相对的、绝对的或外部的,需要考虑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)'