델파이로 긁어오는 HTML 페이지

31395 
Created at 2007-02-06 01:31:09 
235   0   0   0  

- 이 기사는 인터넷으로부터 HTML페이지를 다운로드하는데 요구되는 테크닉을 보여줍니다.
어떤 페이지 스크래핑(패턴 매칭에 대한 정규식으로)하고 "situation-friendly" 방법으로 정보를
보여주게 되죠.

여러분들이 이미 알고 있듯이, "About Delphi Programming"은 기사와, Chat, Forum, RTL Reference,
Glossory, Free Source Code VCL과 더 많은 것들을 포함하는 Delphi/Kylix 개발의 모든 관점을
다루고 있습니다. 이 사이트는 매우 활발하게 운영되고 있습니다. 새로운 내용들이 델파이
초보자들을 위해 튜토리얼에서부터 더 빠르고 더 훌륭하며 더 견고한 개발을 위한 코드를 포함하는
더 개선된 기사들을 날마다 사이트에 추가되고 있습니다.

---------------------------
주의: 우리는 이 사이트에 새 기사를 올리는 방법을 변경해 왔습니다. "What's new and Hot" 섹션이
"In the Spotlight"로 변경되었습니다. 이 기사에서 그 생각이 "valid"일지라도, 만약 "About Delphi
Programming" 사이트로부터 *Current Headlines*를 낚아채고 싶다면, "About Delphi Programming
*Current Headlines* sticker" 페이지를 방문하기 바랍니다.
---------------------------

이 사이트의 한 섹션에서 당신이 가져온 최신뉴스는 최신의 새롭고 변경된 것입니다. 이 페이지는
"What's New and Hot"페이지에 위치해 있습니다. 여러분이 매번 방문할 때마다 필자는 여러분이
그 페이지를 열어볼 것을 추천하고 새로운 기사가 추가되었는지 확인하길 바랍니다.

이러한 페이지에 유용한 정보를 추가하기 위해 사이트 웹 마스터와 관련된 델파이 프로그래밍을
가능하게 하기 위해서 필자는 "About Delphi Programming *New and Hot* sticker"를 개발해 왔습니다.
자바스크립트 파일이 그것이고 웹 마스터는 빈번히 업데이트 되는 프로페셔널 델파이 / 카일릭스
프로그래밍 컨텐츠의 소스를 뷰어에서 볼 수 있게 웹 페이지에 포함시킬 필요성을 충족시키게 됩니다.

자바스크립트 파일(.js)는 델파이로 개발된 유틸리티로 고안되었습니다. 이 어플리케이션은
이 사이트에서 What's New and Hot page를 다운로드 합니다. 그 다음은 페이지로부터 확실한 데이터를
추출하기 위한 정규식을 사용하게 됩니다. 마지막으로 추출된 데이터를 사용해서 .js 파일을 생성합니다.

이 기사의 논점은 인터넷에서 페이지를 다운로드하고 페이지를 스크래핑하여 더 "situation-friendly"
방법에서 정보를 보여주는데 사용된 테크닉을 소개하는 것입니다.

이 기사에서 소개된 데이터 추출 방법의 키는 "situation-friendly" 소스로 HTML문서를 변환하는 것입니다.
아래에 검토할 단계를 보겠습니다:

·HTML 소스 문서를 검색
·HTML 문서를 처리하고 불필요한 데이터는 제거
·결과를 문자열 타입의 변수로 전송
·ListView로 추출된 정보를 출력

주의: 위에서 기술된 Sticker 자바스크립트 파일은 이 기사에서 검토한 테크닉을 사용합니다 -
자바스크립트 document.write 메소드가 포맷된 HTML 코드를 문서에 추가한다는 사실에 따라
다양한 HTML 태그로 구성됩니다. 중요한 것은 Sticker핵인 .js가 필자가 추출하는 방법을
여러분에게 보여주는 데이터라는 것입니다.

Preparing the Delphi Project

이 기사를 기억에 남기기기 위해서 여러분들에게 Delphi를 시작해서 새 프로젝트를 생성할 것을
제안합니다. 폼 위에 TButton을 올려놓고 TListView도 올려놓습니다.

델파이 디폴트 컴포넌트 명을 그대로 사용하도록 합니다. 이제, Button1을 이용해서 인터넷으로부터
파일을 가져오고 정보검색을 해서 ListView1에 결과를 보여줍니다. 또한, ListView1에는 4개의
컬럼을 추가하도록 합니다: Title, URL, 설명, 언제/어디서. ListView1의 ViewStyle은 vsReport로
합니다.

· HTML 소스 문서를 검색

HTML 파일로부터 데이터를 추출하기 전에 확실히 해야할 것이 있습니다.
여러분의 첫 작업은 인터넷에서 파일을 다운로드하는데 사용된 델파이 함수를 생성하는 것입니다.
이 작업을 수행하는 방법은 WinInet API 호출을 사용하는 것이죠. 델파이는 HTTP나 FTP를 사용해서
어느 웹 사이트나 접속하고 파일을 추출할 수 있도록 WinInet API(wininet.pas)를 전적으로 액세스
하도록 하고 있습니다. 필자는 이미 "Get File From the Net"이라는 테크닉을 설명하는 기사를 쓴
적이 있습니다.

다른 접근 방법으로는 델파이 6를 사용한다면, TDownloadURL 객체를 사용하는 것입니다.
객체는 ExtActns.pas 유닛에 적의되어 있는 TDownloadURL는 특정 URL에서 파일의 내용을 저장하기 위해
고안된 것입니다. 여기 이 사이트에 "What's New and Hot" 페이지를 다운로드하는 TDownloadURL을
사용하는코드가 있습니다.

---------------------------------------------------------------------------
function Download_HTM(const sURL, sLocalFileName:string): boolean;
begin
  Result := True;
  with TDownLoadURL.Create(nil) do
  try
    URL := sURL;
    Filename := sLocalFileName;
    try
      ExecuteTarget(nil);
    except
      Result := False
    end;
  finally
    Free;
  end;
end;
---------------------------------------------------------------------------

Download_HTM 함수는 sURL 파라메터에서 지정된 URL로부터 파일을 다운로드하고 sLocalFileName 명으로
PC에 파일을 저장합니다. 이 함수는 성공이면 True를, 그렇지 않으면 False를 리턴합니다.
물론, 이 함수는 Button1 OnClick 이벤트 핸들러에서 호출됩니다. 아래에 코드가 있습니다.
주의할 것은, 이 파일은 "C: emp_adp.newandhot"으로 저장된다는 것입니다.

---------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
const
  ADPNEWHOTURL = 'http://delphi.about.com/cs/newandhot/index.htm';
  TmpFileName = 'c: emp_adp.newandhot';
begin
  if NOT Download_HTM(ADPNEWHOTURL,TmpFileName) then
  begin
    ShowMessage('Error in HTML file download');
    Exit;
  end;

  {
  more code to be added
  }

end;
---------------------------------------------------------------------------

주의: 파일 받기 처리에서 TDownloadURL은 주기적으로 OnDownloadProgress 이벤트를 발생합니다.
이는 처리과정을 사용자에게 피드백으로 제공하기 위해서 입니다. 필자는 여러분이 구현할 수 있도록
이 부분을 남겨둘 것입니다.

지금, 우리는 디스크에 HTM 페이지 파일을 갖고 있으며 오브젝트 파스칼 코드로 ASCII 핸들링하는
테크닉을 사용할 수 있습니다.

· HTML 문서 처리

다음 단계는 HTML 문서 내부에 관심있는 데이터에 위치를 찾고 이를 추출하는 것 입니다. HTML 문서는
순수 ASCII파일이기 때문에, 델파이에서 text파일로 작없하듯 액세스하면 됩니다.

Before we move on

이 기사에서 설명된 테크닉은 XSLT를 사용해서 XML로 HTML처럼 "new"라는 지능적인 정보검색 테크닉과는
어째꺼나 상반된다는 것을 염두하는 것이 중요한데, 여러분이 이야기하는 것에 대해서 모르더라도
걱정은 안해도 됩니다.

웹페이지로부터 데이터를 성공적으로 추출하기 위해 패턴매칭의 몇가지 정규식이 필요합니다. 특히
이는 여러분이 만약 HTML 문서의 구조를 알고 있는 경우에 한해서 페이지를 스크래핑할 수 있을
것입니다.

이것은 여러분이 웹페이지를 생성하는 사람이라면 큰 문제는 아닙니다. 웹페이지 배후의 인물이
아니더라도 여러분은 패턴매칭을 할 수 있지만 HTML이 동적인 컨텐츠이고 문서구조가 다양한 배너광고
시스템과 동적인 서버 사이드 스크립트 엔진일 경우에 변화가 있을 수 있기때문에 종종 여러분의
코드를 체크해야만 합니다.

패턴 매칭결과를 도출못할 때의 상황에서 여러분은 HTML 문서를 XMl로 변환하는 것처럼 더 지능적인
해결책을 찾을 수 있습니다 - 구조화된 문서를 생성하는 표준: 그러나, 여기서 논의할 꺼리는 아닙니다.

여러분이 Notepad로 다운로드된 파일을 열어본다면, 우리가 추출하기 원하는 정보가 내부에 있는지
태크가 있는지 알아야 합니다. 해당 부분을 추출한 후, 서버/클라이언트 사이드 스크립트가 배제되도록
해야합니다 - 태그 사이에 있는 문자들. 남아있는 것은 다음처럼 10개의 포맷된 항목처럼 HTML
코드입니다.

---------------------------------------------------------------------------
<a href="http://delphi.about.com/library/weekly/aa061802a.htm">A Beginner's Guide to Delphi Programming: Chapter 5</a>


06/18 in BEGINNERS COURSE. Take a closer look at exactly what each keyword means by examining each line of the Delphi form unit source code. Interface, implementation, uses and other keywords explained in easy language!
---------------------------------------------------------------------------
(※ 위의 Html코드 예제가 제대로 보이지 않을수도 있습니다.)

자, 여기서 "item" 이라는 4가지 관심있는 정보가 나왔습니다. 코드에서 이 아이템은 ItemBuf 문자열
변수에 저장됩니다. red 마크는 특별히 뉴스 아이템의 URL입니다. blue 마크는 아이템의 title 입니다.
설명은 green마크이며 날짜나 위치는 maroon 마크입니다.

정보의 특정요소를 얻기위해서는 다음코드를 살펴봅니다:

---------------------------------------------------------------------------
// title 찾기
iStart := Pos('', ItemBuf) + Length('');
iStop := Pos('', ItemBuf);
sTitle := Copy(ItemBuf, iStart, iStop-iStart);
---------------------------------------------------------------------------

마침내 여러분들이 각 아이템을 4개의 문자열 변수로 변환하고 ListView에 정보를 출력합니다.
필자는 여러분에게 여기 상세한 프로젝트로 성가시게 하지 않을 것입니다. 전체코드를 확실히
본다면, 분석하는 만큼 많은것을 얻게 될 것입니다.

이 프로젝트는 실시간 동작합니다:

델파이로 긁어오는 HTML 페이지

여러분이 이 기사에 대하여 어떤 문의나 의견이 있다면, Delphi Programming Forum에 게시를 해주기를
바랍니다.

p.s.
Delphi IDE에 남겨지지 않은 최근의 새로운 기사가 여러분들을 도와줄 수 있는 expert, Delphi IDE
add-on 개발하는 방법을 설명하는 기사를 확인해보세요.


---------------------------------------------------------------------------
From Zarko Gajic,
Your Guide to Delphi Programming.
FREE Newsletter. Stay up to date!

원문: http://delphi.about.com/od/internetintranet/l/aa062502a.htm



Tags: capture grab scrap 스크랩 윈도우즈 Share on Facebook Share on X

◀ PREVIOUS
Apache rewrite 사용 방법
▶ NEXT
virtual와 override 문의 사용법에 대해서
  댓글 0
로그인을 하시면 댓글을 등록 할 수 있습니다.
SIMILAR POSTS

virtual와 override 문의 사용법에 대해서 (created at 2007-02-06)

훅 인스턴스의 생성과 해제 (created at 2007-02-06)

Apple iPod Remote Control Protocol (created at 2007-02-06)

대문자, 소문자 변환 함수 (created at 2007-02-14)

PC에서 동영상 삭제가 안될때. (created at 2007-02-14)

마우스 커서 모양바꾸기 (created at 2007-01-28)

Windows95/98 암호 알아내기 (created at 2007-01-28)

작업관리자에서 윈도우 감추기 (created at 2007-01-26)

여러가지 시스템 종료 기법 (created at 2007-01-26)

키보드로 마우스 커서 움직이기 (created at 2007-01-26)

파일 등록정보 보여주기 (created at 2007-01-26)

대화상자에 비트맵 올리기 (created at 2007-01-26)

다이얼로그 리소스대로 폼뷰 크기 설정하기 (created at 2007-01-26)

CD, 플로피등의 디스크 삽입 자동 판단루틴 (created at 2007-01-26)

리스트박스 엔터처리 (created at 2007-01-26)

뷰의 배경색 바꾸기 (created at 2007-01-26)

버튼으로 해당 윈도우 종료하기 (created at 2007-01-26)

태스크 바를 없애버리고 싶다 (created at 2007-01-26)

태스크 바에서 프로그램(윈도우) 제목 숨기기 (created at 2007-01-26)

네임드 커널 오브젝트를 사용한 중복 실행 방지법 (created at 2007-01-26)

MSN Live Messenger가 동작이 안되요 (created at 2007-01-26)

WinGate 깔았더니 블루스크린이 떠요 (created at 2007-01-25)

mdb 파일의 암호깨기 (created at 2007-01-25)

윈도우 버전 알아내는 함수 (created at 2007-01-25)

DEP 기능 비활성화 (created at 2007-01-24)

버퍼 오버 플로우 공격과 DEP (created at 2007-01-24)

Internet Explorer가 자주 비정상 종료 할때 (created at 2006-12-29)

VC 에서 자동으로 빌드 넘버 증가하기 (created at 2006-12-28)

GetDC()의 메모리 누수 막기 (created at 2006-12-27)

모달리스 다이얼로그 와 메모리 리크(Leaks) (created at 2006-12-27)

MFC의 TRACE() 출력 빼먹는 현상 (created at 2006-12-27)

간단히 WIN32에서 MFC의 메모리 누수 체크하는 방법 (created at 2006-12-27)

VC++ 6.0 에서 GDI+ 사용하기.. (created at 2006-12-27)

GDI+를 이용한 회전 3가지.... (created at 2006-12-27)

MFC의 GDI/GDI+ 리소스 누수 현상 (created at 2006-12-27)

UTF-8로 파일 저장하기 (created at 2006-12-22)

Internet Explorer의 검색창에서 한글 입력이 안될때 (created at 2006-11-24)

프린터 인쇄 취소가 안될때 (created at 2006-11-24)

spoolsv.exe의 문제 cpu점유률 100% (created at 2006-11-24)

Region을 이용한 부정형 윈도 만들기 (created at 2006-11-16)

ShellExecuteEx를 이용한 커맨드라인 기반 어플리케이션 실행 (created at 2007-05-07)

특정 폴더의 특정 파일만 파일명으로 지우기 (created at 2007-05-07)

노턴 고스트 2005 (9.0) 설치 및 사용방법 (created at 2007-05-13)

WindowsXP 부팅시 부팅 로고 안나오게 하는 방법 (created at 2007-05-14)

초창기 윈도우즈 (created at 2007-05-16)

리아(RIA)가 온다...리아를 주목하라... (created at 2007-05-16)

윈도의 묵묵부답! '무응답 시간' 단축하기 (created at 2007-05-18)

폴더 창 실행 속도 끌어올리기 (created at 2007-05-18)

PC가 점점 느려지고 있다면 바탕화면에 있는 단축 아이콘이 점유하는 메모리 용량을 되찾아라 (created at 2007-05-18)

프로그램 목록에서 지워지지 않는 목록 지우기 (created at 2007-05-18)

OTHER POSTS IN THE SAME CATEGORY

리아(RIA)가 온다...리아를 주목하라... (created at 2007-05-16)

WindowsXP 부팅시 부팅 로고 안나오게 하는 방법 (created at 2007-05-14)

노턴 고스트 2005 (9.0) 설치 및 사용방법 (created at 2007-05-13)

php로 년,월,일 요일 구하기 (created at 2007-05-11)

매번 rand결과가 같게 나오지 않게 하려면 (created at 2007-05-08)

PHP, 정규분포 난수 생성, 가우스 분포 랜덤 발생 함수; Normal Distribution (created at 2007-05-08)

오늘 날짜를 문자열로 변환 (created at 2007-05-08)

특정 폴더의 특정 파일만 파일명으로 지우기 (created at 2007-05-07)

ShellExecuteEx를 이용한 커맨드라인 기반 어플리케이션 실행 (created at 2007-05-07)

PC에서 동영상 삭제가 안될때. (created at 2007-02-14)

대문자, 소문자 변환 함수 (created at 2007-02-14)

HTML Color Table (created at 2007-02-08)

Apple iPod Remote Control Protocol (created at 2007-02-06)

훅 인스턴스의 생성과 해제 (created at 2007-02-06)

virtual와 override 문의 사용법에 대해서 (created at 2007-02-06)

Apache rewrite 사용 방법 (created at 2007-02-02)

태터툴즈에서 게시물을 id가 아닌 제목으로 뿌리는 방법 (created at 2007-02-02)

애드센스 기록기, Mysense! (created at 2007-02-02)

소켓으로 메일보내기 (created at 2007-01-30)

실수로 삭제한 mysql DB 복구방법 (created at 2007-01-30)

MySQL root 패스워드 분실했을 경우 (created at 2007-01-30)

컴퓨터 활용팁 100가지 (created at 2007-01-30)

마우스 커서 모양바꾸기 (created at 2007-01-28)

이미지가 많아서 로딩할때 시간이 많이걸릴 경우 (created at 2007-01-28)

스크롤바에 붙어다니는 이미지 (created at 2007-01-28)

이미지의 다운로드를 막아주는 스크립트 (created at 2007-01-28)

큰 이미지를 화면크기에 맞게 자동으로 사이즈 조절 (created at 2007-01-28)

랜덤 이미지 로딩시키기 (created at 2007-01-28)

이미지를 서치라이트로 비추는 효과 (created at 2007-01-28)

강력한 소스 보호 (created at 2007-01-28)

UPDATES

소녀대 - Bye Bye Girl (updated at 2024-04-13)

대한민국 날씨 근황 (created at 2024-04-13)

성일종 인재육성 강조하며 이토 히로부미 언급 - 인재 키운 선례? (updated at 2024-04-13)

일제강점기가 더 살기 좋았을지도 모른다는 조수연 국민의힘 후보 - 친일파? (updated at 2024-04-13)

Marshall Ha님의 샤오미 SU7 시승기 - 테슬라의 일론 머스크님이 긴장할만한 느낌 (updated at 2024-04-09)

윙크하는 귀염둥이 반려견들 (created at 2024-04-08)

달콤 살벌한 고백 (created at 2024-04-08)

북한 최정예 공수부대 훈련 모습 (updated at 2024-04-02)

맛있었던 친구 어머니의 주먹밥이 먹고 싶어요 (created at 2024-04-02)

자리 마음에 안든다고 6급 공무원 패는 농협 조합장 (created at 2024-03-26)

85세 딸 짜장면 사주는 102세 어머니 (created at 2024-03-26)

1990년대 감각파 도둑 (created at 2024-03-26)

치매에 걸린 69살의 브루스 윌리스가 전부인 데미무어를 보고 한 말 (updated at 2024-03-22)

경제는 대통령이 살리는 것이 아닙니다 라던 윤석열대통령 - 상황 안좋아지자 여러 전략을 펼쳤지만, 부작용 속출했던 2024년의 봄 (updated at 2024-03-13)

극빈의 생활을 하고 배운것이 없는 사람은 자유가 뭔지도 모를 뿐 아니라 왜 개인에게 필요한지에 대한 필요성을 못느낀다는 윤석열 대통령 (updated at 2024-03-08)

조선일보를 안본다는 사람들이 말하는 그 이유 - 천황폐하, 전두환 각하, 김일성 장군 만세? (created at 2024-03-07)

광폭타이어를 장착하면 성능이 좋아질거라는 착각 (updated at 2024-03-03)

면허시험장에서 면허갱신하면 하루만에 끝나나? (updated at 2024-03-03)

신한은행/신한투자증권 금융거래 종합보고서 다운로드 방법 (updated at 2024-02-26)

100년 된 일본 장난감 회사가 내놓은 변신 기술에 난리난 과학계 (created at 2024-02-26)

알리에서 발견한 한글 지원하는 가성비 쩌는 무선 기계식키보드 (updated at 2024-02-25)

쌍팔년도가 1988년인줄 알았던 1인 (updated at 2024-02-23)

이쁜 색으로 변신한 테슬라 사이버트럭 (created at 2024-02-23)

2024년 카타르 아시안컵 4강전 전날 한국 대표팀 내부에 있었던 이강인의 폭주 (updated at 2024-02-21)

강릉 맛집 지도 (updated at 2024-02-20)

간이 안좋을 때 나타나는 증상 20가지 (updated at 2024-02-20)

배설물을 이용하여 일본에 저항했던 독립운동가 조명하 (updated at 2024-02-20)

요건 몰랐지롱? 이순신을 사랑한 외국인 (created at 2024-02-20)

원빈도 머리빨 (created at 2024-02-19)

대표적인 대한민국의 미남배우 중 하나인 원빈 (created at 2024-02-19)

백제의 건국 시조 온조왕 (updated at 2024-02-19)

700년동안 대한민국 고대국가의 한축이었던 백제시대 (created at 2024-02-19)

대머리들에게 주는 대머리의 조언 (created at 2024-02-17)

일본의 여성 락그룹 프린세스 프린세스의 "다이아몬드" (created at 2024-02-17)

결혼식 직전 연락두절된 신랑 (created at 2024-02-17)

대한민국 축구팀 파문으로 인해 중국 소셜미디어까지 등장한 탁구 전도사 이강인 (updated at 2024-02-16)

조국의 반격으로 흥미진진하게 흘러가는 한국의 정치판 - 데뷰와 동시에 한동훈 장관에게 던진 4개의 질문 (updated at 2024-02-15)

2024년 카타르 아시안컵 4강전 전날 내분사태로 갑자기 회자되는 이승우선수의 친화력 (created at 2024-02-15)

카카오뱅크 금융거래종합보고서/잔액증명서/거래내역서 발급 방법 (created at 2024-02-14)

아이가 최고의 스승이었다 (created at 2024-02-13)

이제는 국민 유행어로 등극한 한동훈의 "싫으면 시집가" (updated at 2024-02-13)

설 연휴 잔소리 메뉴판 - 이제 잔소리 하기전에 요금부터... (updated at 2024-02-10)

로버트 드니로의 70년 전 모습 (created at 2024-02-08)

카메라 어플로 만들어본 슈퍼걸 - 엄... 최종 작품은 왠지... (created at 2024-02-08)

앞트임 하고 새롭게 태어난 대한민국의 젊은 용사 (created at 2024-02-08)

비가 억수로 내리던 2024년의 2월 어느날 캘리포니아의 밤 카니예 웨스트와 그의 아나 비앙카 센소리 (updated at 2024-02-08)

스케방형사 1화 - 수수께끼의 전학소녀사키 (created at 2024-02-05)

백제와 일본의 교류가 가장 활발했던 시기는 근초고왕 시대 (created at 2024-02-05)

일에 찌들은 아빠가 꿈에서 깨어나지 않자 구출해주는 짱구 (created at 2024-02-03)

이제는 할아버지가 된 휴 그랜트(Hugh Grant)가 블랙핑크 콘서트에 다녀온 후 소감 (created at 2024-02-03)