2015년 1월 29일 목요일

C#.HtmlLoader_HtmlAgilityPack을활용하여 Web에서 Html 데이터 받아오는법.

Summary.
  -C#환경(.net)에서 사용할수있는 HtmlAgilityPack을 활용하여 Web에서 Html데이터 받아오는 코드.

Requirements.
 -HtmlAgilityPack Library
   : VS 내의 NuGet Pakage Manager를 통해 설치할수 있다.


Code.
class HtmlLoader
{
    public enum State
    {
        Working,
        End
    }

    string mURL;
    HtmlDocument mDocument;
    State mState;
    Action mCallback;
    Encoding mEncoding;

    public HtmlLoader(string url, Encoding enc , Action callback)
    {
        this.mURL = url;
        this.mState = State.End;
        this.mCallback = callback;
        this.mEncoding = enc;
    }

    //새로운 스레드를 생성하여 실행.
    public void LoadWithThread()
    {
        if (mState == State.Working) return;

        Thread thraed = new Thread(new ThreadStart(LoadHtml));
        thraed.Start();

    }
    
    //호출한 스레드상에서 바로 실행.
    public void Load()
    {
        if (mState == State.Working) return;
        LoadHtml();
        
    }

    void LoadHtml()
    {
        mState = State.Working;

        mDocument = new HtmlDocument();
        HtmlWeb website = new HtmlWeb();
        StreamReader reader = new StreamReader(WebRequest.Create(mURL).GetResponse().GetResponseStream(), mEncoding);   

        mDocument.Load(reader);

        mCallback();
        mState = State.End;
    }
    
    public HtmlDocument _Document
    {
        get { return mDocument; }
    }
}
Use.
string url = textBox1.Text;

loader = new HtmlLoader(url,
    Encoding.GetEncoding("euc-kr"),
    new Action(() => 
        System.IO.File.WriteAllText("web.txt", loader._Document.DocumentNode.InnerText)
));
loader.LoadWithThread();
이후 생성되는 web.txt파일을 확인할수있다.