關鍵詞檢測工具,就是根據關鍵詞百度搜搜搜狗等搜索引擎查詢獲取排名站點地址等相關信息的一個東西。當我接到這個case的時候,首先聯想的是一道 面試題,就是給你一個html頁面讓你檢索出這個頁面的關鍵信息,這個面試題是比較簡單的,就是正則的匹配,因此我也想用正則去獲取。不管三七二十一,首 先實現再說
其實這個已經不是最初的那個版本了,最古老的那個版本改動面目全非了,這個其實就是四條線程
去讀取html然后分析 就這樣實現了。
過程中遇到問題有
沒有考慮清楚需求,頁面分析正則維護難

1 /// <summary> 2 /// 根據標簽名稱獲取Html 3 /// </summary> 4 /// <param name="TagName">標簽名稱</param> 5 /// <param name="HTML">html</param> 6 /// <returns>返回值列表</returns> 7 public List<string> GetHtmlTagByName(string TagName, string HTML) 8 { 9 HTML = Regex.Replace(HTML, @"<\s+", "<", RegexOptions.IgnoreCase); 10 HTML = Regex.Replace(HTML, @"\s+>", ">", RegexOptions.IgnoreCase); 11 HTML = Regex.Replace(HTML, @"</\s+", "</", RegexOptions.IgnoreCase); 12 List<string> TagList = new List<string>(); 13 string Tag = string.Empty; 14 HTML = HTML.ToLower(); 15 int TagLength = TagName.Length; 16 int StartTagLength = TagLength + 2; 17 int EndTagLength = TagLength + 3; 18 List<int> IndexList = new List<int>(); 19 for (int i = 0; i < HTML.Length; i++) 20 { 21 if (HTML[i] == '<') 22 { 23 if ((HTML.Length - i) >= StartTagLength) 24 {//<div> | <div\s 25 string TemTag = HTML.Substring(i, StartTagLength); 26 if (TemTag == '<' + TagName + ' ' || TemTag == '<' + TagName + '>') 27 { 28 IndexList.Add(i); 29 } 30 } 31 if ((HTML.Length - i) >= EndTagLength) 32 {//</div> 33 string TemTag = HTML.Substring(i, EndTagLength); 34 if (TemTag == "</" + TagName + '>') 35 { 36 if (IndexList.Count > 0) 37 { 38 int S = IndexList[IndexList.Count - 1]; 39 IndexList.Remove(IndexList[IndexList.Count - 1]);//移除最后一個 40 TagList.Add(HTML.Substring(S, (i - S) + EndTagLength)); 41 } 42 } 43 } 44 } 45 } 46 return TagList; 47 }
這就是一個簡單的方法獲取標簽對之間的全部html 實現了所需要的工能,但是害怕穩定性出現問題,所以棄用
棄用之后重新考慮思路 畫出流程圖
這樣思路更加清晰了 也考慮了配置的為題 容易修改 配置截圖
做完配置以后其實就是考慮接口實現接口做出最終的版本
測試截圖
整個過程中,我覺得自己出現的最大問題就是 考慮問題角度問題,我因為沒有做過 就想着如何去實現,在做的過程中發現很多問題 再去擴展 最后代碼相當混亂 也許一個月后我自己去修改都不能完成了。以后一定要先考慮好架構(姑且這么說啊),實現如果出現問題是可以解決的。
收獲:從內部一步步往外擴展,不如從外部一步步往內部深入!學習思路和編程思想,積累經驗。練習所學