Как мне получить абсолютный URL-адрес в CsQuery?

Я пытаюсь получить абсолютный URI каждого тега привязки на странице Википедии. Я думаю, что свойство .href должно указывать абсолютный URI, но когда я пробую его в CsQuery, я обнаруживаю, что оно по-прежнему дает мне относительный URI. Как мне получить абсолютный URI?

    static void Main(string[] args)
    {
        string url = "https://en.wikipedia.org/wiki/Barack_Obama";
        var dom = CQ.CreateFromUrl(url);
        var selected = dom["div#mw-content-text a"];
        foreach (var a in selected)
            Console.WriteLine(a["href"]);
    }

person derekhh    schedule 30.03.2014    source источник


Ответы (1)


CsQuery показывает вам все, что существует на HTML-странице...

Вы можете просто сделать это:

 string domain = "https://en.wikipedia.org";

 var dom = CQ.CreateFromUrl(url);

 List<string> urls = new List<string>();

 dom["a[href]"].Each(dom=>{
    string url = dom.GetAttribute("href");
    if(!url.StartsWith("https"))
       url = domain + url;

    urls.Add(url);
 });

});

person nazarkin659    schedule 31.03.2014
comment
Да. Я понимаю, что вы всегда можете использовать домен + URL-адрес, чтобы указать абсолютный URI. Но для каждого анкорного текста его атрибут href на самом деле должен предоставлять абсолютный URI, если вы проверите его в инструментах разработчика Chrome. Есть ли аналогичный подход в CsQuery? - person derekhh; 31.03.2014
comment
Chrome знает контекст страницы, поэтому может создать полный URL-адрес. CsQuery ничего не знает о том, где находится страница в иерархии, это просто разметка. Так что вам нужно будет сделать что-то вроде этого. - person Jamie Treworgy; 24.04.2014