2014-03-30 3 views
1

위키 백과 페이지에서 각 앵커 태그의 절대 URI를 가져 오려고합니다. 나는 .href 속성이 절대 URI를 제공해야한다고 생각하지만 CsQuery에서 그것을 시도 할 때 여전히 상대 URI를 제공한다는 것을 알게되었다. 절대 URI를 어떻게 가져야합니까?CsQuery에서 절대 URL을 얻는 방법은 무엇입니까?

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"]); 
    } 

답변

3

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); 
}); 

});

+0

예. 절대 URI를 제공하기 위해 항상 "domain + url"을 사용할 수 있음을 알고 있습니다. 그러나 각 앵커 텍스트의 경우 href 속성은 Chrome 개발자 도구에서 확인하면 절대 URI를 제공해야합니다. CsQuery에서 비슷한 접근법이 있습니까? – derekhh

+3

Chrome은 전체 URL을 구성 할 수 있도록 페이지의 컨텍스트를 알고 있습니다. CsQuery는 페이지가 어디에 있는지에 대해 전혀 알지 못합니다. 단지 마크 업입니다. 그래서 이런 일을해야 할 것입니다. –

관련 문제