1

我正在用 C# 构建一个网络抓取工具,并通过执行以下操作获取页面上的所有链接:

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))

}

这是在 Internet 上运行的,因此链接可能格式不正确,甚至可能是不同的协议。将 /gohere/index.html 或 potato.php 等内部链接转换为也包含网站 URL 的外部链接的最佳方法是什么?

4

3 回答 3

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 的相似之处,因此无需检查,您只需“转换”在此类页面上找到的每个链接。

于 2013-05-26T17:12:37.793 回答
0

我在这里对“这是在互联网上运行”部分感到困惑。您是先下载网页然后再抓取它吗?另外,如果语言不依赖,我建议使用 jSoup。它将回答您的大部分问题。

于 2013-05-26T17:13:44.753 回答
0

尽管尖叫的答案是正确的,但我更喜欢简单的方法:

List<string> links = new List<string>();
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
    links.Add("http://mywebsite.com"+link.InnerText);
}
于 2013-05-26T18:07:59.470 回答