【发布时间】:2010-11-16 22:14:50
【问题描述】:
我有一个从各种网络资源中提取 URL 的功能。不用说,有些是完全有效的 URL,有些是相对于页面 HTML 的。下面是我为检查 URL 而派生的 asp.net/ c# 逻辑,然后从站点中提取的内容生成完整可用的 URL...
我已经有一段时间没有看过这段代码了,但我记得几个月前它运行良好,现在它需要进行许多调整才能运行 - 特别是相对路径和从各种相对变化中重新生成完整 url。
有没有比我这里更简单的方法或方法来完成这个看似路由样板任务?
注意: origianlurl 是第一个搜索页面的完整 url,relativeUrl 是在搜索页面中找到的 url(可以是完整的 www.site.com 或 /contactus.html)
private string ResolveRelativePaths(string relativeUrl, string originatingUrl)
{
if (relativeUrl.StartsWith("http") || relativeUrl.StartsWith("www"))
return relativeUrl;
if (relativeUrl.StartsWith("/"))
{
//get main url something.com
Uri myURI = new Uri(originatingUrl);
//add the relative page to the end
return myURI.Host + relativeUrl;
}
string resolvedUrl = String.Empty;
string[] relativeUrlArray = relativeUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
string[] originatingUrlElements = originatingUrl.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
int indexOfFirstNonRelativePathElement = 0;
for (int i = 0; i <= relativeUrlArray.Length - 1; i++)
{
if (relativeUrlArray[i] != "..")
{
indexOfFirstNonRelativePathElement = i;
break;
}
}
int countOfOriginatingUrlElementsToUse = originatingUrlElements.Length - indexOfFirstNonRelativePathElement - 1;
//for (int i = 0; i <= countOfOriginatingUrlElementsToUse - 1; i++)
for (int i = 0; i <= countOfOriginatingUrlElementsToUse ; i++)
{
if (originatingUrlElements[i] == "http:" || originatingUrlElements[i] == "https:")
resolvedUrl += originatingUrlElements[i] + "//";
else
resolvedUrl += originatingUrlElements[i] + "/";
}
for (int i = 0; i <= relativeUrlArray.Length - 1; i++)
{
if (i >= indexOfFirstNonRelativePathElement)
{
resolvedUrl += relativeUrlArray[i];
if (i < relativeUrlArray.Length - 1)
resolvedUrl += "/";
}
}
return resolvedUrl;
}
【问题讨论】:
标签: asp.net url screen-scraping