程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C#2.0實現網絡蜘蛛(WebSpider)(6)

用C#2.0實現網絡蜘蛛(WebSpider)(6)

編輯:關於C語言

在getA方法中除了切換到狀態0外,其他的狀態切換都將已經讀入的字符賦給String變量a,如果最後發現變量a中的字符串不可能是後,就將a清空,並切換到狀態0後重新讀入字符。

在getA方法中使用了一個重要的方法getHref來從中獲得href部分。getHref方法的實現如下:

getHref方法的實現

 // 從中獲得Href
private String getHref(string a)
{
try
{
string p = @"href\s*=\s*('[^']*'|""[^""]*""|\S+\s+)"; // 獲得Href的正則表達式
MatchCollection matches = Regex.Matches(a, p,
RegexOptions.IgnoreCase |
RegexOptions.ExplicitCapture);
foreach (Match nextMatch in matches)
{
return nextMatch.Value; // 返回href
}
return null;
}
catch (Exception e)
{
throw e;
}
}

在getHref方法中使用了正則表達式從中獲得href。在中正確的href屬性格式有三種情況,這三種情況的主要區別是url兩邊的符號,如單引號、雙引號或沒有符號。這三種情況如下所示:

情況1:comprg

情況2:comprg

情況3:comprg

getHref方法中的p存儲了用於過濾這三種情況的href,也就是說,使用正則表達式可以獲得上述三種情況的href如下:

從情況1獲得得的href:href = "http://www.comprg.com.cn"

從情況2獲得得的href:href = 'http://www.comprg.com.cn'

從情況3獲得得的href:href = http://www.comprg.com.cn

在獲得上述的href後,需要將url提出來。這個功能由getUrl完成,這個方法的實現代碼如下:

getUrl方法的實現

 // 從href中提取url
private String getUrl(string href)
{
try
{
if (href == null) return href;
int n = href.IndexOf('='); // 查找'='位置
String s = href.Substring(n + 1);
int begin = 0, end = 0;
string sign = "";
if (s.Contains("\"")) // 第一種情況
sign = "\"";
else if (s.Contains("'")) // 第二種情況
sign = "'";
else // 第三種情況
return getFullUrl(s.Trim());
begin = s.IndexOf(sign);
end = s.LastIndexOf(sign);
return getFullUrl(s.Substring(begin + 1, end - begin - 1).Trim());
}
catch (Exception e)
{
throw e;
}
}

在獲得url時有一點應該注意。有的url使用的是相對路徑,也就是沒有“http://host”部分,但將url保存時需要保存它們的完整路徑。這就需要根據相對路徑獲得它們的完整路徑。這個功能由getFullUrl方法完成。這個方法的實現代碼如下:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved