테스트 사이트 - 개발 중인 베타 버전입니다

크롤러 만들기 (3)

· 4년 전 · 1518

꽤 오랜만에.. 크롤러 만들기 글을 써봅니다.

사실 학업이니 일이니 너무 바빴네요.

 

여태까지 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 부분은 삭제하기로 하겠습니다.

 

 

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

게시글 목록

번호 제목
92
82
80
79
78
77
76
75
72
65
64
63
62
57
55
54
53
52
51
50
46
44
43
39
34
29
28
27
26
22