getFullUrl方法的實現代碼
// 將相對路徑變為絕對路徑
private String getFullUrl(string url)
{
try
{
if (url == null) return url;
if (processPattern(url)) return null; // 過濾不想下載的url
// 如果url前有http://或https://,為絕對路徑,按原樣返回
if (url.ToLower().StartsWith("http://") || url.ToLower().StartsWith("https://"))
return url;
Uri parentUri = new Uri(parentUrl);
string port = "";
if (!parentUri.IsDefaultPort)
port = ":" + parentUri.Port.ToString();
if (url.StartsWith("/")) // url以"/"開頭,直接放在host後面
return parentUri.Scheme + "://" + parentUri.Host + port + url;
else // url不以"/"開頭,放在url的路徑後面
{
string s = "";
s = parentUri.LocalPath.Substring(0, parentUri.LocalPath.LastIndexOf("/"));
return parentUri.Scheme + "://" + parentUri.Host + port + s + "/" + url;
}
}
catch (Exception e)
{
throw e;
}
}
在ParseResource中還提供了一個功能就是通過正則表達式過濾不想下載的url,這個功能將通過processPattern方法完成。實現代碼如下:
processPattern方法的實現代碼
// 如果返回true,表示url符合pattern,否則,不符合模式
private bool processPattern(string url)
{
foreach (string p in patterns)
{
if (Regex.IsMatch(url, p, RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture)
&& !p.Equals(""))
return true;
}
return false;
}
ParseResource類在分析html代碼之前,先將Html下載到本地的線程目錄中,再通過FileStream打開並讀取待分析的數據。ParseResource類其他的實現代碼請讀者參閱本文提供的源代碼。