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

时间:2013-05-26 17:06:25

标签: c# web-scraping html-agility-pack

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

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

}

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

3 个答案:

答案 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);
}