LoginSignup
3
0

More than 1 year has passed since last update.

Dockerでスクレイピング環境構築

Last updated at Posted at 2022-03-11

自分1人では、環境をサクッと構築しスクレイピングしていましたが、メンバー間で共有したいときに面倒だったのでDockerで再現しました。
GoではHTMLの操作に、Agoutiを使用。
HTML解析には、goqueryを使っています。

サンプルコード

main.go
package main

import (
	"log"
	"strings"

	"github.com/PuerkitoBio/goquery"
	"github.com/sclevine/agouti"
)

func main() {
	log.Println("処理開始...")

	// ChromeDriver
	driver := agouti.ChromeDriver(
		agouti.ChromeOptions("args", []string{
			"--headless",
			"--window-size=1280,800",
		}),
		agouti.Debug,
	)

	if err := driver.Start(); err != nil {
		log.Fatalln("Chromeドライバ起動に失敗しました。")
	}
	defer driver.Stop()

	page, err := driver.NewPage(agouti.Browser("chrome"))
	if err != nil {
		log.Fatalln("Chromeでページを生成できませんでした。")
	}

	if err := page.Navigate("https://example.com"); err != nil {
		log.Fatalln("該当ページに遷移できませんでした。")
	}

	getAll, err := page.HTML()
	if err != nil {
		log.Fatalln("遷移後のHTML(一覧)取得失敗しました。")
	}
	readerGetAll := strings.NewReader(getAll)
	contentDom, _ := goquery.NewDocumentFromReader(readerGetAll)
	
	if seeText := contentDom.Find("#header > h1 > span").Text(); seeText != "xxxxxx" {
		log.Fatalln("対象の文字列はありませんでした。")
	}

	log.Println("正常に処理が終了しました。処理を終了します。")
}

Dockerfile
FROM ubuntu:latest

RUN apt update &&\
    apt install -y wget curl unzip make tzdata software-properties-common

RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` \
    && curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip \
    && unzip /tmp/chromedriver_linux64.zip \
    && mv chromedriver /usr/local/bin/

RUN add-apt-repository ppa:longsleep/golang-backports \
    && apt install -y golang-1.17

ENV TZ=Asia/Tokyo

ENV GO111MODULE=on
ENV GOPATH=$HOME/go
ENV PATH=$PATH:$GOPATH/bin

WORKDIR /go/src
docker-compose.yml
version: '3'

services:
  sgo:
    container_name: sgo
    build: .
    tty: true
    ports:
      - 3030:3030
    volumes:
      - ./:/go/src
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0