안녕하세요, 델파이 시작한지 보름도 안됨 초보하나예요.. ㅜ.ㅠ
정말 답답해 미치겠어요...남들 연말이라고 망년회다 송년회다 하는데..전 매일 야근에..
주말도 출근하고 미칠 지경이예요 ㅠ.ㅠ 저희 사장님 넘 나빵!
다름이 아니구요.
현재 웹페이지(HTML) 자동스크랩 프로그램을 짜고 있어요.^^*;
하루 600~1000 건 정도의 웹페이지(HTML)을 스크랩 해야하는데, 수동으로 일일이 1페이지씩
돌릴수가 없잖아요.
어쨌든 루틴부터 짜고 보자는 심정으로 책도 없이 무작정 시작을 했어요.
<!--CodeS-->
- 대상 웹사이트 URL : http://www.g2b.go.kr
- 결과물 : 특정 범위의 공고번호와 세부내용을 추출.
<!--CodeE-->
황당한건 첫페이지(http://www.g2b.go.kr) 이나 검색조건선택 페이지를 접속하지않고,
공고목록이나 공고내용보기 페이지로 바로 접근하면, 정상적인 접근이 아니라는 식의 문구가 보이더라구요.
웹페이지 쿠키 체크하는 어플로 보면 쿠키값이 존재하긴 하는데 만료일을 0 으로 처리해놔서 그런지
인터넷임시파일 폴더에도 파일이 없고, 미치겠더라구요.
그래서 생각 생각끝에 어쩔수 없이 돌아가자는 심정으로, 한참 망설이다 4일만에 한델에 가입부터 했거든여.
여차저차 문법이고 뭐고, 개념 자체 없었지만, 맘이 급하니 우선 하고보자는 심정으로 하나 하나 검색에 의존을
했거든여.
그래서 한페이지 한페이지 처리하는 방식으로 버튼 이벤트 처리로 Procedure 호출하는 형태로 접근을 했어요.
물어 물어 TWebBrower 로 이용해서 하는 방법으로 실행시에 첫페이지(http://www.g2b.go.kr) 접속
시키고, 그 후에 목록 페이지 날짜별로 가져오고 하는 작업을 진행하고 여차저차 해서 공고번호, 공고내용까지
긁어오는 순서까지 왔는데요.
여기서 딱 문제에 봉착을 하게되었죠.
for 루프로 프로그램을 돌리는 것은 좋은데 루프속도를 TWebBrower 가 따라오질 못해서 정상적으로 웹페이
지를 긁어오지 못하고 다운로드 완료 이전에 있던 공고목록을 그대로 긁어온다는 문제점이 있더라구요.
보다 나은 방법이나 혹은 콤퍼넌트, 함수가 있다면 답변 부탁드릴게요..^^*;;
간단히 작업했던 순서를 정리를 해 볼게요.
(1차) TIdHTTP 이용
- 이용 스크랩시도 실패... [ HTTP/1.1 302 Moved Temporarily ] : 실패/포기 ㅠ.ㅠ
(2차) TWebBrowser
- TWebBrowser 로 초기페이지(http://www.g2b.go.kr) 접근
- TWebBrowser 로 공고 목록페이지 접근 성공
- 공고목록 추출성공
- 공고내용 추출성공
for 루프를 어떻게 처리해야 할지 몰라서 버튼 이벤트로 Procedure 호출해서
한번에 한페이지씩 처리하는 정도로 성공했는데요.
for 루프로 하다보니 로딩속도가 느려서 HTML 을 못 긁어와요 ㅠ.ㅠ
목록도 내용도 ㅠ.ㅠ
(3차) 웹페이지를 출력없이 바로 긁어오는 방법을 찾아야 할것 같아요...
답변 부탁드려요^^*;;
긁어올 대상 페이지를 바로 읽을때와
메인을 읽은 후 대상 페이지를 읽을때 Request가 다를겁니다.
(HTTP 에서 페이지를 요청할때 html 주소만 보내는게 아니란건 아시죠?)
CommView등의 패킷 보는 프로그램을 이용해서
뭐가 달라지는지 확인하고, 그 부분 ( 그리고 여타 정보도...)을 idHttp1.Header (던가..^^;;)에
TStringList형태로 넣어주세요.
물론, html을 긁어온 후에 처리하는 부분은 문제없으시겠죠???
(넣어야 할 값이 랜덤이라면... OTL )
2. TWebBrowser, EmbededWB를 이용한 방법
검색해 보시면 이 두가지 컴포넌트에서 다운로드 완료를 결정하는것에 관한 내용이 있습니다.
이미 말씀 드렸다시피 HTML을 제외한 다른 내용들은 다운로드 하지 않도록 (이건 EmbededWB만
있었던것 같기도 하군요;;;) 철저히 막아두셔야 합니다.
그렇지 않으면 완료 이벤트가 여러번 일어납니다. -_-;;;
물론 For문은 사용하지 못 합니다. 이벤트 위주로 해야하고......
한 페이지에 완료 이벤트가 중복으로 일어난건 아닌지,
이벤트론 다음으로 넘어가지 못 할 수도 있어서, 타이머등으로 타임아웃을 설정해 줘야 합니다.
물론 못 읽은 페이지에 대한 로그도 남겨야 겠죠.
뱀다리....
왜..... 잘 모르는 델파이로 작업을 하시는건지 모르겠네요;;;;