Как вытянуть основной домен?

timoxa949

Client
Регистрация
16.11.2018
Сообщения
142
Благодарностей
17
Баллы
18
Привет, что то не могу дотуплить как сделать регулярку или как еще вытащить основной домен из списка с кучей доменов вида:


и т.п. то есть большой разнобой, и мне нужно вытащить основные домены. Как это сделать? Спасибо.
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
488
Благодарностей
318
Баллы
63
Все ссылки должны начинаться на http-https. Домены из субдоменов не извлекает
C#:
var urlList = project.Lists["UrlList"];//список ссылок
var domainList = project.Lists["domainList"];//список доменов, субдоменов
foreach(string url in urlList)
{
    Uri myUri = new Uri(url);   
    domainList.Add(myUri.Host);
}
 
  • Спасибо
Реакции: timoxa949 и Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
1 418
Благодарностей
406
Баллы
83
Все ссылки должны начинаться на http-https. Домены из субдоменов не извлекает
C#:
var urlList = project.Lists["UrlList"];//список ссылок
var domainList = project.Lists["domainList"];//список доменов, субдоменов
foreach(string url in urlList)
{
    Uri myUri = new Uri(url); 
    domainList.Add(myUri.Host);
}
Можете мне тоже подсказать с похожей проблемой?
Из выдачи яндекс, я собираю ссылки и по ним потом перехожу.Я хочу сверять куда перешел, но в выдачи яндекса и на самом деле они отличаются.
Где сейчас находишься можно так {-Page.Domain-}
Я захожу на такие сайты, они очень часто меняют домен, не полностью домен, поддомен меняется, доменная зона.
Единственные выход сравнить это брать домен без поддомена и доменной зоны, например логикой"lordfilm"=="lordfilm"
А домены могут быть такие s7.lordfilm.org, lordfilm.stream, co.lordfilm.cx, co.lordfilm.tv,co.lordfilm.info,tv.lordfilm.cx и так далее
 

timoxa949

Client
Регистрация
16.11.2018
Сообщения
142
Благодарностей
17
Баллы
18
Все ссылки должны начинаться на http-https. Домены из субдоменов не извлекает
C#:
var urlList = project.Lists["UrlList"];//список ссылок
var domainList = project.Lists["domainList"];//список доменов, субдоменов
foreach(string url in urlList)
{
    Uri myUri = new Uri(url);  
    domainList.Add(myUri.Host);
}
Спасибо дружище, а как еще реализовать такое, чтобы вытягивал основные домены из DOM, так как работаю не только со списками, иногда нужны вытягивать из DOM. Спасибо заранее.
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
488
Благодарностей
318
Баллы
63
Спасибо дружище, а как еще реализовать такое, чтобы вытягивал основные домены из DOM, так как работаю не только со списками, иногда нужны вытягивать из DOM. Спасибо заранее.
C#:
var hec = instance.ActiveTab.FindElementsByXPath("//a");
if(hec != null)
{
    var domainList = project.Lists["domainList"];//список доменов, субдоменов
    foreach(var el in hec)
    {
        string u = el.GetAttribute("href");
        if(!string.IsNullOrEmpty(u) && u.StartsWith("http"))
        {
            string url = new Uri(u).Host;
            if(!domainList.Contains(url))//если в списке такого домена нет
            {
                domainList.Add(url);  //добавляем в список домен
            }
        }
    }
}
 
  • Спасибо
Реакции: Zedx, timoxa949 и orka13

SergSh

Client
Регистрация
10.05.2017
Сообщения
488
Благодарностей
318
Баллы
63
Можете мне тоже подсказать с похожей проблемой?
Из выдачи яндекс, я собираю ссылки и по ним потом перехожу.Я хочу сверять куда перешел, но в выдачи яндекса и на самом деле они отличаются.
Где сейчас находишься можно так {-Page.Domain-}
Я захожу на такие сайты, они очень часто меняют домен, не полностью домен, поддомен меняется, доменная зона.
Единственные выход сравнить это брать домен без поддомена и доменной зоны, например логикой"lordfilm"=="lordfilm"
А домены могут быть такие s7.lordfilm.org, lordfilm.stream, co.lordfilm.cx, co.lordfilm.tv,co.lordfilm.info,tv.lordfilm.cx и так далее
Если известен домен по которому происходит проверка, то
C#:
var domainList = project.Lists["domainList"];
string domainName = "lordfilm";
foreach(string domain in domainList)
{
    if(domain.Contains(domainName))
        return 1;//если есть вернет 1
}
return 0;//если нет вернет 0
Не совсем понятно что делать после проверки и нужно ли заходить на сайт. мб можно до захода проверить по списку..
 
  • Спасибо
Реакции: timoxa949 и Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
1 418
Благодарностей
406
Баллы
83
Домен не известен, я их из поиска парщу из выдачи и после перехода проверяю куда перешел, бывает получаться так мегафон и теле2 подсовывают свой лединг, или у них домен заблокирован. Во общем принял решение нужно строго контролировать куда перейти, чтобы время не тратить на это все.
Вот например в выдачи домен такой
58893

А на самом деле он уже другой co.lordfilm.cx и такие очень часто попадаются, но не уходить мне со всех подряд чей домен не совпадает, это тоже трата времени.
Я так понял тут переменная с доменом
string domainName = "lordfilm"; ?
а в списке другой домен, вроде бегло посмотрел, вроде работает.Спасибо больше, завтра буду прикручивать)
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
488
Благодарностей
318
Баллы
63
Домен не известен
без списка всевозможных доменных зон не получится качественно проверять домены.
Сниппет вставить в красный кубик, в самом низу выбрать переменную для результата. Запускать кубик когда перешли на страницу.
C#:
string url = project.Variables["url"].Value;//ссылка по которой мы перешли на страницу
string urlDomain = new Uri(url).Host;
string tabDomain = instance.ActiveTab.Domain;

urlDomain = (urlDomain.StartsWith("www.")) ? urlDomain.Replace("www.", "") : urlDomain;
tabDomain = (tabDomain.StartsWith("www.")) ? tabDomain.Replace("www.", "") : tabDomain;

string[] ud = urlDomain.Split('.');
string[] td = tabDomain.Split('.');

//если длинна массива домена из урла 2 значит название домена под индексом 0
if(ud.Length == 2)
{
    if(td.Contains(ud[0]))
    {
        return "1";//если найдено совпадение вернет 1
    }
    else return "0";//если не найдено совпадение вернет 0
}

//если длинна массива домена из таба 2 значит название домена под индексом 0
if(td.Length == 2)
{
    if(ud.Contains(td[0]))
    {
        return "1";//если найдено совпадение вернет 1
    }
    else return "0";//если не найдено совпадение вернет 0
}

//эта удаляет последний элемент в массивах доменов и если есть хоть одно совпадение возвращает 1
//НЕ ГАРАНТИРУЕТ ТОЧНОСТЬ
if(ud.Take(ud.Count() - 1).Where(x => !td.Take(td.Count() - 1).Contains(x)).Count() > 0)
{
    return "1";//если найдено совпадение вернет 1
}
else return "0";//если не найдено совпадение вернет 0
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
1 418
Благодарностей
406
Баллы
83
Но так-то работает, и about:blank один отдает но это уже не проблема. Проверил пару тройку раз, большую часть срабатывает так как надо.
Я могу отблагодарить, денег сейчас не много, но сотку смогу отблагодарить на яндекс кошелек, напиши мне кошелек отблагодарю)
1593196464458.png
 
  • Спасибо
Реакции: SergSh

SergSh

Client
Регистрация
10.05.2017
Сообщения
488
Благодарностей
318
Баллы
63
Но так-то работает, и about:blank но это уже не проблема. Проверил пару тройку раз, большую часть срабатывает так как надо.
Я могу отблагодарить, денег сейчас не много, но сотку смогу отблагодарить на яндекс кошелек, напиши мне кошелек отблагодарю)
Посмотреть вложение 58896
Лайка хватит))
 
  • Спасибо
Реакции: Roman48

SergSh

Client
Регистрация
10.05.2017
Сообщения
488
Благодарностей
318
Баллы
63
Проверку на пустоту домена из таба добавил. Если за три раза с паузой в 5 сек не взяло, то вернет 0.
C#:
string url = project.Variables["url"].Value;//ссылка по которой мы перешли на страницу
string urlDomain = new Uri(url).Host;
string tabDomain = string.Empty;
for(int i = 0; i < 3; i++)
{
    instance.ActiveTab.WaitDownloading();
    tabDomain = instance.ActiveTab.Domain;
    if(!string.IsNullOrEmpty(tabDomain)) break;   
    Thread.Sleep(5000);
    
}
if(string.IsNullOrEmpty(tabDomain)) return "0";
    
urlDomain = (urlDomain.StartsWith("www.")) ? urlDomain.Replace("www.", "") : urlDomain;
tabDomain = (tabDomain.StartsWith("www.")) ? tabDomain.Replace("www.", "") : tabDomain;

string[] ud = urlDomain.Split('.');
string[] td = tabDomain.Split('.');

//если длинна массива домена из урла 2 значит название домена под индексом 0
if(ud.Length == 2)
{
    if(td.Contains(ud[0]))
    {
        return "1";//если найдено совпадение вернет 1
    }
    else return "0";//если не найдено совпадение вернет 0
}

//если длинна массива домена из таба 2 значит название домена под индексом 0
if(td.Length == 2)
{
    if(ud.Contains(td[0]))
    {
        return "1";//если найдено совпадение вернет 1
    }
    else return "0";//если не найдено совпадение вернет 0
}

//эта удаляет последний элемент в массивах доменов и если есть хоть одно совпадение возвращает 1
//НЕ ГАРАНТИРУЕТ ТОЧНОСТЬ
if(ud.Take(ud.Count() - 1).Where(x => !td.Take(td.Count() - 1).Contains(x)).Count() > 0)
{
    return "1";//если найдено совпадение вернет 1
}
else return "0";//если не найдено совпадение вернет 0
 
  • Спасибо
Реакции: djaga и Roman48

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)