Parser : HTML에서 원하는 부분만 골라내자~ 버전 업데이트
HTML에서 원하는 부분만 골라내자(http://chaoskcuf.com/137)라는 프로그램의
버전 업데이트 정보입니다.

기존 프로그램에 singleline 기능을 추가하였습니다.
Singleline이 무엇인고 하니
만약에 다음에서 원더걸스 이미지를 검색하고자 한다고 가정해봅시다.
(http://search.daum.net/search?w=img& ··· 58a%25a4)
위의 검색결과 페이지에 HTML 소스를 보면 이미지 하나당 아래와 같은 코드가 반복되는 것을 알 수 있습니다.
<td width="152" valign="bottom" nowrap>
<table border="0" cellpadding="0" cellspacing="0" style="margin-bottom:7px">
<tr>
<td class="iArea"><a href="http://cafe240.daum.net/_c21_/bbs_searc ··· mn2plh00" target="_blank" onClick="smartLog(this, 's=IM&a=TIIM&d=N2plH00&pg=1&r=10&p=1&rc=16&e1=15&st=3&bt=1&hs=0&hi=1',event); return gUSRXLink(this, 'TIIM', '10', '1', '', '15', 'N2plH00', '', '', 'N2plH00', '1', '16', event);"><img src="http://image01.search.daum-img.net/imgthum/img02/2/82/11/CF_5sb4_IwYk_247946_23.jpg" onError="noImage(this)"></a></td>
</tr>
</table>
<div><a href="http://cafe240.daum.net/_c21_/bbs_searc ··· mn2plh00" onMouseOver="overLayer('원더걸스 뉴욕체험 2/26~27',event)" onMouseOut="hideLayer()" target="_blank" onClick="smartLog(this, 's=IM&a=TIIM&d=N2plH00&pg=1&r=10&p=2&rc=16&e1=15&st=3&bt=1&hs=0&hi=1',event); return gUSRXLink(this, 'TIIM', '10', '2', '', '15', 'N2plH00', '', '', 'N2plH00', '1', '16', event);"><b>원더걸스</b> 뉴욕체험 ..</a></div>
<div class="gt">450 x 300<span id="vline"> | </span>
카페
</div>
<table border="0" cellpadding="0" cellspacing="0" style="margin-bottom:7px">
<tr>
<td class="iArea"><a href="http://cafe240.daum.net/_c21_/bbs_searc ··· mn2plh00" target="_blank" onClick="smartLog(this, 's=IM&a=TIIM&d=N2plH00&pg=1&r=10&p=1&rc=16&e1=15&st=3&bt=1&hs=0&hi=1',event); return gUSRXLink(this, 'TIIM', '10', '1', '', '15', 'N2plH00', '', '', 'N2plH00', '1', '16', event);"><img src="http://image01.search.daum-img.net/imgthum/img02/2/82/11/CF_5sb4_IwYk_247946_23.jpg" onError="noImage(this)"></a></td>
</tr>
</table>
<div><a href="http://cafe240.daum.net/_c21_/bbs_searc ··· mn2plh00" onMouseOver="overLayer('원더걸스 뉴욕체험 2/26~27',event)" onMouseOut="hideLayer()" target="_blank" onClick="smartLog(this, 's=IM&a=TIIM&d=N2plH00&pg=1&r=10&p=2&rc=16&e1=15&st=3&bt=1&hs=0&hi=1',event); return gUSRXLink(this, 'TIIM', '10', '2', '', '15', 'N2plH00', '', '', 'N2plH00', '1', '16', event);"><b>원더걸스</b> 뉴욕체험 ..</a></div>
<div class="gt">450 x 300<span id="vline"> | </span>
카페
</div>
</td>
<td width="33%" nowrap> </td>
여기서 빨간색 부분만 골라내고 싶을 경우
Pattern 에 (?:<td width="152" valign="bottom" nowrap>?).+?<img src="(.+?)".+?>.+?overLayer\('(.+?)' 를 입력하고
Singleline Document 체크박스에 체크를 합니다.
이렇게 한다면 다음 검색 결과에서 이미지 주소와 이미지의 제목을 쉽게 얻을 수 있습니다.
Singleline은 전체 문서를 한 줄로 가정한다는 것입니다.
그래서 패턴이 여러줄에 걸쳐서 비교하게끔 할 수 있습니다.
반대로 Singleline 을 끈다면 문서를 각 줄마다 끊어서 패턴과 비교합니다.
(이럴 경우 위와 같은 패턴식을 사용할 수 없겠죠.)
위와 같이 하신다면 간단한 크롤러(Crawler)는 쉽게 만들 수 있을 거라 생각이 듭니다.
P.S. 프로그램이 비정상 종료되는 버그를 수정하였습니다.
"프로그래밍 / 자작 프로그램" 분류의 다른 글
| [C#] Range select sliderbar(trackbar) 배포 (0) | 2008/12/16 |
| 스도쿠(Sudoku) 답을 찾아 주는 프로그램 (2) | 2008/11/13 |
| K-means 보다 월등한 Isodata Clustering 알고리즘 구현 (0) | 2008/08/06 |
| 태터툴즈용 Silverlight Tag Cloud를 만들었습니다~ (0) | 2008/06/09 |
| [ATL/COM] IEContextMenu - 1.0.0.5 버전 배포 (13) | 2008/06/02 |
| HTML에서 원하는 부분만 골라내자~ (12) | 2008/05/09 |
| [ATL/COM] IEContextMenu - 1.0.0.4 버전 배포 (6) | 2008/03/07 |
| [ATL/COM] IEContextMenu - 1.0.0.3 버전 배포 (3) | 2008/03/03 |
프로그래밍/자작 프로그램
2008/06/19 15:37
Parser0.2.zip
댓글을 달아 주세요
좋은 프로그램이네요. 실례가 안된다면 소스좀 보여주실수 있으신지요.
소스를 통채로 드리는 것 좀 그렇구요 ^^;
필요하신 부분 있으시면 블로그를 통해 알려드리겠습니다.
네~~ 아무래도 무리한 요구였죠 ㅠㅠ
제가 전문개발자가 아니고 취미로 하다보니 여러가지 부족한게 많아서요. 근본이 없다고 해야하나. 주먹구구식으로 작성하다보니
메모리나 변수관리도 엉망이고 함수도 쓰기 귀찮아 그냥 함수 쓰느니 붙여 넣기 하거든요. 그러다보니 프로그램이
세련되지 못하게 에러도 자주뜨고 오래 돌리다보면 다운되고 그런게 있어서 세련된 코드 작성법좀 배우려고요.
더군다나 제가 만들려고 하는 프로그램의 가장 핵심적인 기능이라서요 ㅎㅎ
염치를 불구하고 소스 부탁좀 드렸었습니다. 기능을 구현 못한다기 보다는 세련된 방법을 배우고 싶어서요 ㅎㅎ
질문입니다~
html소스를 어떤 방식으로 가져 오시는지 궁금합니다.
웹페이지를 파싱하기 위한 html소스를 가져와야 하는데
저같은 경우 한 페이지를 가지고 파싱을 하는게 아니라
한 페이지 읽어와서 필요한 부분만 파싱하고
다른 페이지 읽어와서 필요한 부분만 파싱하고
이게 반복되어야 하는데
저같은 경우 단순하게 웹브라우져 컨트롤을 안보이게 숨겨놓고
webBrowser1.navigate(URL[i]);
delayTag();//페이지 로딩완료 기다리기
string Doc= webBrowser1.documnet.body.innerhtml;
이렇게 했거든요 ;; 대신 속도가 느려지더라고요.
주인장님께서 하신 방법이 궁금합니다.
C#에 WebClient 라는 아주 훌륭한 편리한 클래스가 있습니다.
WebClient client = new WebClient();
string html = client.DownloadString("http://~~~");
client.Dispose();
이렇게 사용하시면 됩니다~