C# 在抓取时处理内部链接的最佳方法是什么

C# 在抓取时处理内部链接的最佳方法是什么,c#,web-scraping,html-agility-pack,C#,Web Scraping,Html Agility Pack,我正在用C构建一个web scraper,并通过执行以下操作获取页面上的所有链接: foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) } 这是在互联网上运行的,因此链接可能是错误的,甚至是不同的协议。将内部链接(如/gohere/index.html或potato.php)转换为也包含站点URL的外部链接的最佳方法是什么。这可以非常容易地完成,您可以使用用于获取页面的Uri构建新的Uri 像这样: Ur

我正在用C构建一个web scraper,并通过执行以下操作获取页面上的所有链接:

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

}

这是在互联网上运行的,因此链接可能是错误的,甚至是不同的协议。将内部链接(如/gohere/index.html或potato.php)转换为也包含站点URL的外部链接的最佳方法是什么。

这可以非常容易地完成,您可以使用用于获取页面的Uri构建新的Uri

像这样:

Uri baseUri = new Uri("http://www.contoso.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm");

Console.WriteLine(myUri.ToString());
有关更多信息:


这同样适用于相对和绝对href,因此无需检查,您只需“转换”在这样的页面上找到的每个链接。

这很容易做到,您可以使用用于获取页面的Uri构建新的Uri

像这样:

Uri baseUri = new Uri("http://www.contoso.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm");

Console.WriteLine(myUri.ToString());
有关更多信息:


这同样适用于相对和绝对href,因此无需检查,您只需“转换”在这样的页面上找到的每个链接。

我有点困惑,这是在互联网上运行的。您是否先下载网页,然后再将其删除?
另外,如果语言没有依赖性,我建议使用jSoup。它将回答您的大多数问题。

我有点困惑,这是在互联网上运行的。您是否先下载网页,然后再将其删除? 另外,如果语言没有依赖性,我建议使用jSoup。它将回答您的大多数问题。

虽然答案是正确的,但我更喜欢简单的方法:

List<string> links = new List<string>();
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
    links.Add("http://mywebsite.com"+link.InnerText);
}
虽然答案是正确的,但我更喜欢简单的方法:

List<string> links = new List<string>();
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
    links.Add("http://mywebsite.com"+link.InnerText);
}

我正在下载和解析页面上的所有链接,有些是内部链接,有些是外部链接。我正在下载和解析页面上的所有链接,有些是内部链接,有些是外部链接。一个问题,当在同一页面中找到外部链接时,外部链接会发生什么情况?一个问题,当在同一页面中找到外部链接时,外部链接会发生什么情况?