크롤러 만들기 (3) 정보
크롤러 만들기 (3)본문
꽤 오랜만에.. 크롤러 만들기 글을 써봅니다.
사실 학업이니 일이니 너무 바빴네요.
여태까지 URL, Builder, Post 초기화 부분을 진행했습니다.
아직 이 부분이 완성된 건 아니고 제 생각엔 하나로 통일하거나 파일 기반으로 진행하는 게 추가되야 할 듯 하나 이건 다음에 구현하고록 합시다.
오늘 할 부분은 여태 초기화했던 부분들을 바탕으로 실제 웹 페이지를 접속해서 데이터를 받아오는 구조체와 메소드, 함수를 작성하는 부분입니다.
제가 웹 크롤링할 때 사용할 라이브러리는 https://github.com/chromedp/chromedp 라이브러리입니다.
크롬 드라이버만 있으면 작동할 수 있는 라이브러리고 사용방법이 간단하여 써보겠습니다.
Crawl 폴더를 생성하여 crawl.go 파일을 생성..
package Crawl import ( "context" "github.com/chromedp/chromedp" "gnuCrawler/Setting" "time" ) type WebDriver struct { ctx context.Context cancel context.CancelFunc Str string // 데이터 반환 } func NewCrawler() *WebDriver { return &WebDriver{} } // Run 메소드 func (w *WebDriver) Run(url *Setting.URL) string { w.ctx, w.cancel = chromedp.NewContext(context.Background()) w.ctx, w.cancel = context.WithTimeout(w.ctx, 30 * time.Second) defer w.cancel() err := chromedp.Run(w.ctx, chromedp.Navigate(url.URL + url.PageNumber), chromedp.WaitVisible(`body div#ft`), chromedp.InnerHTML(`html body div#wrapper div#container_wr div#container div#bo_list form#fboardlist div.tbl_head01.tbl_wrap table tbody tr td.td_subject div.bo_tit a`, &w.Str), ) if err != nil { panic(err) } return w.Str }
app.go 에서는
w := Crawl.NewCrawler() data := w.Run(URL) fmt.Println(data)
코드를 추가해줍시다.
ㅌㅋㅊㅋㅌㅊㅋㅌㅊㅋㅌㅊㅋㅊ
출력 결과입니다.
확인해보니 https://demo.sir.kr/gnuboard5/bbs/board.php?bo_table=free&page= 링크에서 맨 위 게시물이 뜨네요.
오늘은 여기까지.
이제 할 부분은
1. URL과 PageNumber를 합치고, 페이지 넘버를 자동으로 부여해주는 것
2. Post 부분에서 세팅한 값들에 따라 자동으로 크롤링이 가능하게 만드는 것
3. 코드 이쁘게 재수정
크게 이 3개네요.
지금 보니까 Builder 부분은 사용하지 않을 듯 합니다.
사실 개발하기 전에는 Builder에 따라 크롤링 태그를 바꿀 수 있게 할려고했는데
연습용 프로젝트니까 일단 기본 Gnu로 진행하고 Builder 부분은 삭제하기로 하겠습니다.
0
댓글 0개