이전에 윈폼으로 작업한 것을 콘솔용으로 바꿔봤습니다.
웹브라우져 컨트롤 없이 HTML 파싱해보고 싶어서 였습니다. 웹브라우져가 아무래도 리소스를 좀 잡아 먹는거 같아서 입니다. 한참 돌고 돌아서 할 수 있게 되었는데요. 이번에도 구글신의 도움을 받았네요.
생각보다 많은 자료가 있는건 아니였습니다. 데브피아에 있는 관련 질문글에 답변 내용을 보고 참고했습니다.
이번 코딩은 mshtml 이라는 네임스페이스를 참고하는 부분이 주요 부분이라고 하겠습니다.
여전히 다나와의 현금/카드 동일몰의 최저가를 찾아내는 걸로 목표를 삼았습니다. mshtml의 인터페이스들로 파싱을 할 수 있습니다.
코딩은 이전 포스팅에 있는 웹 소스 가져오기 부분과 파싱하는 부분을 적절히 섞어서(?) 작성했습니다. 웹브라우져 컨트롤 보다는 조금 복잡해 졌지만 그 원리는 같습니다.
코딩
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; using mshtml; namespace TestFileParser { class Program { static void Main(string[] args) { try { string url = "http://blog.danawa.com/prod/?prod_c=1132675&cate_c1=861&cate_c2=873&cate_c3=959&cate_c4=0"; Console.WriteLine("Accessing {0} ...", url); WebRequest request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Encoding encode; if (response.CharacterSet.ToLower() == "utf-8") { encode = Encoding.UTF8; } else { encode = Encoding.Default; } Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream, encode); string responseFromServer = reader.ReadToEnd(); HTMLDocument doc = new HTMLDocument(); doc.designMode = "on"; object[] oPageText = { responseFromServer }; IHTMLDocument2 oMyDoc = (IHTMLDocument2)doc; oMyDoc.write(oPageText); IHTMLTable table = (IHTMLTable)doc.getElementById("cm"); IHTMLElementCollection trs = table.rows; IHTMLTableRow row = trs.item(1); IHTMLElement cel = (IHTMLElement)row.cells.item(2); Console.WriteLine("최저가 = {0}", cel.innerText); Console.ReadLine(); reader.Close(); dataStream.Close(); response.Close(); } catch (WebException e) { Console.WriteLine("주소값이 유효하지 않거나 열리지 않는 사이트입니다.\n\n" + e.Message); Console.ReadLine(); } catch (Exception e) { Console.WriteLine(e.Message); Console.ReadLine(); } } } }
Solution Explorer에서 mshtml을 참조 해야 합니다. 주소값을 하나만 직접 코딩에 박아 넣었지만 아마 실무에서는 무한 루프를 돌려서 써야 겠죠? ^^
DB 접근하기가 필요하겠네요. 콘솔로 DB에 접근해서 데이터를 가져오는 코딩을 하나 짜야 겠네요.
그럼 즐프하세요.
혹시 다나와의 관계자가 보시고 문제 있으시면 말씀해 주세요. 아마 보실리는 없겠죠? ^^;;
'프로그래밍 > C#' 카테고리의 다른 글
C# 에서 웹브라우져 실행시키기 (0) | 2014.02.03 |
---|---|
C# 초간단 파일 검색 (0) | 2014.01.15 |
C# 웹 서비스 확장 응용하기 (1) | 2011.04.19 |
C# 웹 서비스 만들기 및 테스트 (4) | 2011.04.19 |
[C# TIP] 문자열에서 숫자만 추출하기 (5) | 2011.01.07 |
[C#] HTML 파싱해서 원하는 정보 가져오기 (3) | 2011.01.04 |
C# 에서 MSSQL 연결하기 - 가칭 : DBController (2) | 2011.01.03 |
[C#] Win form으로 제작한 웹페이지 소스보기 (6) | 2010.12.30 |