반응형
오늘은 웹 크롤링에 대해 알아보겠습니다.
go언어에서의 웹 크롤링에도 selenium과 chrome webdvier를 사용하는 방법이 있지만, selenium 개발하신 분이 현재는 관리를 중단한 상태라고 합니다. 대신 chromedp를 주로 사용한다고 합니다. 간략하게 chromedp를 알아보겠습니다.
우선 설치는 일반적인 go 라이브러리들과 마찬가지로 go get 명령으로 설치합니다. (깃헙링크)
go get -u github.com/chromedp/chromedp
그리고 예제는 여기링크로 가면 여러가지를 확인할 수 있습니다만, 천천히 살펴보시고
주요 method에 대한 예시로 아래 코드를 남겨놓겠습니다. (아래 코드는 실행되지는 않습니다. 추후 간단한 실행가능 예시로 업데이트 하겠습니다.)
package main
import (
"context"
"fmt"
_ "log"
"time"
"github.com/chromedp/cdproto/runtime"
"github.com/chromedp/chromedp"
)
func main() {
// chrome 실행 옵션 설정
opts := append(chromedp.DefaultExecAllocatorOptions[:],
chromedp.DisableGPU,
chromedp.Flag("headless", false), //headless를 false로 하면 브라우저가 뜨고, true로 하면 브라우저가 뜨지않는 headless 모드로 실행됨. 기본값은 true.
)
contextVar, cancelFunc := chromedp.NewExecAllocator(context.Background(), opts...)
defer cancelFunc()
contextVar, cancelFunc = chromedp.NewContext(contextVar)
defer cancelFunc()
// setting 필요 없이 headless 모드로 실행할 경우 아래의 코드로 대체 가능
// contextVar, cancelFunc := chromedp.NewContext(
// context.Background(),
// chromedp.WithLogf(log.Printf),
// )
//defer cancelFunc()
contextVar, cancelFunc = context.WithTimeout(contextVar, 50*time.Second) // timeout 값을 설정
defer cancelFunc()
var strVar string
err := chromedp.Run(contextVar,
chromedp.Navigate(`https://www.google.com/`), // 시작 URL
chromedp.WaitVisible(`body`), //body 요소를 모두 불러들일 때까지 대기
chromedp.InnerHTML(`pre`, &strVar), // pre 태그의 내부 텍스트를 strVar변수에 입력
chromedp.OuterHTML(`div.srch_employees__list`, &strVar), // 태크와 그 내부 텍스트를 함께 strVar변수에 입력
chromedp.Click(`.employees-open`, chromedp.NodeVisible), // .employees-open 클래스의 요소를 클릭
chromedp.Sleep(10*time.Second), //10초간 대기
chromedp.SetAttributeValue(`input#empSearchKeyWord`, "value", "홍길동", chromedp.NodeVisible), //input의 value에 '홍길동'을 입력
chromedp.SetAttributes(`input#empSearchKeyWord`, map[string]string{"value": "12345678"}, chromedp.NodeVisible), //input에 value 속성을 추가하고 값을 대입함
chromedp.SendKeys(`input#empSearchKeyWord`, "a"), //키 입력
chromedp.Evaluate(`window.open('www.naver.com')`, &strVar), //javascript 실행
chromedp.Value(`div#executiveStatusPop > div.dialog__contents > div.srch_employees > div.srch_employees__container > div.employees__srch > div._fr > div.board-search > input#empSearchKeyWord label`, &strVar), // 해당 요소의 텍스트값을 취하여 strVar변수에 대입
)
if err != nil {
panic(err)
}
}
그럼 이만~~
반응형
'Programming > Golang' 카테고리의 다른 글
Golang GUI(Webview) - HTML 파일 분리 (0) | 2021.11.12 |
---|---|
Golang GUI(Webview) - 시작하기 (0) | 2021.11.11 |
Go언어 - Fyne timer예제 (0) | 2021.01.01 |
Go언어 - Fyne 아이콘 이미지 설정 (0) | 2021.01.01 |
Go언어 - Fyne 한글 폰트 설정 (2) | 2021.01.01 |