이전에 윈폼으로 작업한 것을 콘솔용으로 바꿔봤습니다.
웹브라우져 컨트롤 없이 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 |