首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较用于保存域的不同urls

问比较用于保存域的不同urls
EN

Stack Overflow用户
提问于 2014-03-22 05:21:07
回答 1查看 229关注 0票数 0

简介:

我有一个start url假设www.example.com,现在我在这个url上运行刮取器来收集属于同一个站点和外部链接的所有内部链接。

问题:

我正在使用下面的代码来比较找到的url和主url www.example.com,看看它们是否都有相同的域,所以我将url作为内部url。

代码语言:javascript
复制
                    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 }

上述逻辑是否正确?因为如果假设我得到了一个新的url http://news.example.com,那么找到的域名是:news.example.com,它与主url的域名不匹配。这是对的吗?它是否匹配。如果我的方法不够好,还有什么更好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-22 06:03:23

下面是从子域查找主域的解决方案

代码语言:javascript
复制
            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;
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22573816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档