我正在使用C#构建一个Web scraper并通过执行以下操作获取页面上的所有链接:
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
}
这是在互联网上运行,因此链接可能是格式错误甚至是不同的协议。将内部链接(如/gohere/index.html或potato.php)转换为包含网站网址的外部链接的最佳方法是什么。
答案 0 :(得分:4)
这可以很容易地完成,你可以使用你用来获取页面的Uri构建一个新的Uri。
像这样:
Uri baseUri = new Uri("http://www.contoso.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm");
Console.WriteLine(myUri.ToString());
有关详细信息:http://msdn.microsoft.com/en-us/library/9hst1w91.aspx
这适用于相对和绝对href的相似,因此无需检查,您只需“转换”您在页面上找到的每个链接。
答案 1 :(得分:0)
我在这里感到困惑的是“这是在互联网上运行的”部分。你是第一次下载一个网页,然后刮它? 另外,如果语言不依赖,我建议使用jSoup。它将回答您的大部分疑问。
答案 2 :(得分:0)
虽然shriek答案是正确的,但我更喜欢简单的方法:
List<string> links = new List<string>();
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
links.Add("http://mywebsite.com"+link.InnerText);
}