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

timoxa949

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


и т.п. то есть большой разнобой, и мне нужно вытащить основные домены. Как это сделать? Спасибо.
 
Все ссылки должны начинаться на 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
Все ссылки должны начинаться на 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 и так далее
 
Все ссылки должны начинаться на 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. Спасибо заранее.
 
Спасибо дружище, а как еще реализовать такое, чтобы вытягивал основные домены из 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);  //добавляем в список домен
            }
        }
    }
}
 
  • Спасибо
Реакции: Jufel, timoxa949 и orka13
Можете мне тоже подсказать с похожей проблемой?
Из выдачи яндекс, я собираю ссылки и по ним потом перехожу.Я хочу сверять куда перешел, но в выдачи яндекса и на самом деле они отличаются.
Где сейчас находишься можно так {-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
Домен не известен, я их из поиска парщу из выдачи и после перехода проверяю куда перешел, бывает получаться так мегафон и теле2 подсовывают свой лединг, или у них домен заблокирован. Во общем принял решение нужно строго контролировать куда перейти, чтобы время не тратить на это все.
Вот например в выдачи домен такой
58893

А на самом деле он уже другой co.lordfilm.cx и такие очень часто попадаются, но не уходить мне со всех подряд чей домен не совпадает, это тоже трата времени.
Я так понял тут переменная с доменом
string domainName = "lordfilm"; ?
а в списке другой домен, вроде бегло посмотрел, вроде работает.Спасибо больше, завтра буду прикручивать)
 
Домен не известен
без списка всевозможных доменных зон не получится качественно проверять домены.
Сниппет вставить в красный кубик, в самом низу выбрать переменную для результата. Запускать кубик когда перешли на страницу.
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
Но так-то работает, и about:blank один отдает но это уже не проблема. Проверил пару тройку раз, большую часть срабатывает так как надо.
Я могу отблагодарить, денег сейчас не много, но сотку смогу отблагодарить на яндекс кошелек, напиши мне кошелек отблагодарю)
1593196464458.png
 
  • Спасибо
Реакции: SergSh
Но так-то работает, и about:blank но это уже не проблема. Проверил пару тройку раз, большую часть срабатывает так как надо.
Я могу отблагодарить, денег сейчас не много, но сотку смогу отблагодарить на яндекс кошелек, напиши мне кошелек отблагодарю)
Посмотреть вложение 58896
Лайка хватит))
 
  • Спасибо
Реакции: Roman48
Проверку на пустоту домена из таба добавил. Если за три раза с паузой в 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
\w{1,}\.\w{1,}(?=(/|\s))
 
  • Спасибо
Реакции: Sergodjan

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