본문

C#에서 CsQuery 사용 + NuGet에서 CS0246 오류 해결하기



CsQuery는 자바스크립트의 jQuery와 유사한 동작을 c#.net에 구현하여, 더욱 쉬운 html 개체조작을 가능하게 한다. 프로젝트 사이트(https://github.com/jamietre/CsQuery)에서 대부분의 정보를 얻을 수 있으며, 프로젝트가 활성화 되지 않아 아직은 예제가 많지 않은 느낌이다. 아무튼 라이브러리를 사용하기 위해 github 페이지에서 프로젝트를 다운받아 직접 컴파일 할 수 있다. 또 다른 방법으로, 이 프로젝트는 NuGet 프레임워크상에 라이브러리를 제공하므로, 온라인으로 검색하여 쉽게 라이브러리를 가져와 사용할 수 있다


하지만 소스를 다 짜고나서 자신의 프로젝트를 컴파일하려 하면 다음과 같은 오류가 발생한다. 'error CS0246: The type or namespace name 'CsQuery' could not be found (are you missing a using directive or an assembly reference?) 이 문제는 프로젝트의 Target framework가 맞지 않아 생긴 문제로, .NET Framework 4 Client Profile으로 되어있는 설정을 .NET Framework 4으로 바꿔주면 해결된다. - 출처 : Take NuGet to the next level with sample packages


그럼 돌아와서 CsQuery의 예를 살펴보자. 사실 저널의 SCI / SCIE를 판별해야할 소소한 작업이 생겨서 이를 처리하기 위해 CsQuery를 사용한 것이다. '특정 저널의 SCI / SCIE 구분 방법' 페이지를 참고하며 이 프로그램을 실행시키면 매우 편리하게 이 둘을 구분할 수 있을 것이다. 위 페이지의 내용을 요약하자면, 'SCIE라고 나타나지 않으면 해당 저널은 SCI'라는것이다. 혹은 다음 링크를 확인해보자.

http://www.scie-thomsonreuters.org/ - Science Citation Information Expanded (SCIE) Journal List

http://www.sci-thomsonreuters.org/ - Science Citation Information (SCI) Journal List


만들기는 몇줄 안되는데 라이브러리가 무거운 바람에 용량이 커져서 실행파일 첨부는 하지 않으며, 또한 급 귀찮아 지는고로 주석은 달지 않았다. 대신 알아둘 점으로, 해당 selection 하위에서 또다른 노드를 검색하는데에는 find() 메소드를 사용해야 한다는 점과 .Cq()메소드로 해당 selection을 기준으로 새로운 DOM을 생성하여 사용할 수 있다는 점이다. 그리고 아래 코드에서는 예외 처리를 하지 않았는데, 이를 위해서 만약 해당 element가 검색되지 않았을 경우 null을 반환한다는 점을 기억하면 된다.


(대신 댓글에 문의사항을 달아주시면 답변드리겠습니다)




private void button1_Click(object sender, EventArgs e){

    CQ.CreateFromUrlAsync("http://ip-science.thomsonreuters.com/cgi-bin/jrnlst/jlresults.cgi?PC=D&Full=" + textBox1.Text, successDelegate);

}

 

void successDelegate(ICsqWebResponse response){

    var dom = response.Dom;

    var found = dom["#mainFull form ul"][0].Cq();

    String title = found.Find("h4")[0].InnerText;

    var ISBN = found.Find(".coverage")[0]["href"].Split('\'')[1];

    var cover = found.Find("div li a");

 

    String text="";

    for (int i = 0; i < cover.Length - 1; ++i){

        var li = cover[i];

        text += li.InnerText + "\r\n";

    }

 

    this.Invoke((MethodInvoker)delegate{

        textBox2.Text = ISBN + "\r\n" +text; // runs on UI thread

    });

}

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.