Url Filter則是對提取出來的URL再進行一次篩選。不同的應用篩選的標准是不一樣的,比如對於baidu/google的搜索,一般不進行篩選,但是對於垂直搜索或者定向抓取的應用,那麼它可能只需要滿足某個條件的url,比如不需要圖片的url,比如只需要某個特定網站的url等等。Url Filter是一個和應用密切相關的模塊。
using System; using System.Collections.Generic; using Crawler.Common; namespace Crawler.Processing { public class UrlFilter { public static List<Uri> RemoveByRegex(List<Uri> uris, params string[] regexs) { var uriList=new List<Uri>(uris); for (var i = 0; i < uriList.Count; i++) { foreach (var r in regexs) { if (!RegexHelper.IsMatch(uriList[i].ToString(), r)) continue; uris.RemoveAt(i); i--; } } return uriList; } public static List<Uri> SelectByRegex(List<Uri> uris, params string[] regexs) { var uriList = new List<Uri>(); foreach (var t in uris) foreach (var r in regexs) if (RegexHelper.IsMatch(t.ToString(), r)) if(!uriList.Contains(t)) uriList.Add(t); return uriList; } } }