比较保存域的不同网址

时间:2014-03-22 05:21:07

标签: c# winforms visual-studio-2010 web-scraping

简介

我有一个开始网址假设www.example.com现在我在此网址上运行剪贴板来收集属于同一网站和外部链接的所有内部链接。

  

问题:

我使用下面的代码将找到的网址与主网址www.example.com进行比较,看看它们是否都有相同的网址,因此我将网址作为内部网址。

                    Uri baseUri = new Uri(url); //main URL
                    Uri myUri = new Uri(baseUri, strRef); //strRef is new found link
                    //domain = baseUri.Host;
                    domain = baseUri.Host.Replace("www.", string.Empty).Replace("http://", string.Empty).Replace("https://", string.Empty).Trim();

                    string domain2=myUri.Host.Replace("www.", string.Empty).Replace("http://", string.Empty).Replace("https://", string.Empty).Trim();

                    strRef = myUri.ToString();
                    if (domain2==(domain) )
                    { //DO STUFF }

以上是正确的逻辑吗?因为如果假设我获得了新的网址http://news.example.com,则找到的域名将变为:news.example.com,其与主网址的域名不匹配。这是正确的吗?它是否匹配。如果我的不够好,那么更好的方法是什么。

1 个答案:

答案 0 :(得分:0)

这是一个从子域

中查找主域的解决方案
            string url = "http://www.xxx.co.uk";
            string strRef = "http://www.news.xxx.co.uk";

            Uri baseUri = new Uri(url); //main URL
            Uri myUri = new Uri(baseUri, strRef); //strRef is new found link
            var domain = baseUri.Host;
            domain = baseUri.Host.Replace("www.", string.Empty).Replace("http://", string.Empty).Replace("https://", string.Empty).Trim();

            //hrere is solution

            string domain2 = GetDomainName(strRef);

            strRef = myUri.ToString();
            if (domain2 == (domain))
            { //DO STUFF 

            }



   private static string GetDomainName(string url)
        {
            string domain = new Uri(url).DnsSafeHost.ToLower();
            var tokens = domain.Split('.');
            if (tokens.Length > 2)
            {
                //Add only second level exceptions to the < 3 rule here
                string[] exceptions = { "info", "firm", "name", "com", "biz", "gen", "ltd", "web", "net", "pro", "org" };
                var validTokens = 2 + ((tokens[tokens.Length - 2].Length < 3 || exceptions.Contains(tokens[tokens.Length - 2])) ? 1 : 0);
                domain = string.Join(".", tokens, tokens.Length - validTokens, validTokens);
            }
            return domain;
        }