goquery & spa でクローリング(v1.0.0)

```golang
// Using Version
// wget https://chromedriver.storage.googleapis.com/100.0.4896.60/chromedriver_linux64.zip
func setupDriver(url string) string {
	var driver *agouti.WebDriver = agouti.ChromeDriver(
		agouti.ChromeOptions("args", []string{
			"--headless",
			"--window-size=1280,800",
		}),
		agouti.Debug,
	)

	if err := driver.Start(); err != nil {
		log.Fatal(err)
	}
	defer driver.Stop()

	page, err := driver.NewPage()
	if err != nil {
		log.Fatal(err)
	}

	// URL Setting
	err = page.Navigate(url)
	if err != nil {
		log.Fatal(err)
	}

	src, err := page.HTML()
	if err != nil {
		log.Fatal(err)
	}
	return src
}

type WebSpider struct {
	url      string
	keyword  string
	document *goquery.Document
}

func NewWebSpider(url string, keyword string) *WebSpider {
	return &WebSpider{
		url:      url,
		keyword:  keyword,
		document: nil,
	}
}

func (ws *WebSpider) Run() {
	ws.document, _ = ws.buildDocument()
	route := ws.findRoutesFromKeyWord()[ws.keyword]
	ws.document.Find(strings.Join(route, " ")).Each(func(i int, s *goquery.Selection) {
		fmt.Println(s.Text())
	})
}

func (ws *WebSpider) buildDocument() (*goquery.Document, error) {
	// response, err := http.Get(ws.url)
	// if err != nil {
	// 	log.Fatal(err)
	// 	return &goquery.Document{}, err
	// }

	srcPage := setupDriver(ws.url)
	sr := strings.NewReader(srcPage)

	document, err := goquery.NewDocumentFromReader(sr)
	if err != nil {
		log.Fatal(err)
		return &goquery.Document{}, err
	}

	return document, nil
}

// Routesと複数形の理由はキーワードに正規表現を使ったときを想定して。
func (ws *WebSpider) findRoutesFromKeyWord() map[string][]string {
	routes := make(map[string][]string, 0)
	body := ws.document.Find("body")
	body.Find("*").Each(func(i int, s *goquery.Selection) {
		text := s.Clone().Children().Remove().End().Text()
		if text == ws.keyword {
			routes[text] = ws.findRouteFromNode(s)
		}
	})
	return routes
}

func (ws *WebSpider) findRouteFromNode(node *goquery.Selection) []string {
	route := make([]string, 0)
	currentNode := node
	for {
		route = append(route, goquery.NodeName(currentNode))
		if goquery.NodeName(currentNode) == "html" {
			break
		}
		currentNode = currentNode.Parent()
	}
	// reverse
	for i, j := 0, len(route)-1; i < j; i, j = i+1, j-1 {
		route[i], route[j] = route[j], route[i]
	}
	return route
}

func GoquerySample() {
	ws := NewWebSpider(
		"https://yakkun.com/legends_arceus/zukan/",
		"リーフィア",
	)
	ws.Run()
}
```

```tex
すべて
第1世代:カントー
第2世代:ジョウト
第3世代:ホウエン
第4世代:シンオウ
第5世代:イッシュ
第6世代:カロス
第7世代:アローラ
第8世代:ガラル・ヒスイ
ヒスイ図鑑順
全国図鑑順
50音順
モクロー
フクスロー
ジュナイパー(ヒスイ)
ヒノアラシ
マグマラシ
バクフーン(ヒスイ)
ミジュマル
フタチマル
ダイケンキ(ヒスイ)
ビッパ
ビーダル
ムックル
ムクバード
ムクホーク
コリンク
ルクシオ
レントラー
ケムッソ
カラサリス
アゲハント
マユルド
ドクケイル
ポニータ
ギャロップ
イーブイ
シャワーズ
サンダース
ブースター
エーフィ
ブラッキー
リーフィア
グレイシア
ニンフィア
ズバット
ゴルバット
クロバット
フワンテ
フワライド
コロボーシ
コロトック
ブイゼル
フローゼル
ミノムッチ
ミノマダム(くさき)
ミノマダム(すなち)
ミノマダム(ゴミ)
ガーメイル
イシツブテ
ゴローン
ゴローニャ
オドシシ
アヤシシ
ゴンベ
カビゴン
パラス
パラセクト
ピチュー
ピカチュウ
ライチュウ
ケーシィ
ユンゲラー
フーディン
ヒコザル
モウカザル
ゴウカザル
ミミロル
ミミロップ
チェリンボ
チェリム
コダック
ゴルダック
ミツハニー
ビークイン
ストライク
バサギリ
ハッサム
ヘラクロス
マネネ
バリヤード
エイパム
エテボース
コイキング
ギャラドス
カラナクシ
トリトドン
ハリーセン(ヒスイ)
ハリーマン
ピンプク
ラッキー
ハピナス
スボミー
ロゼリア
ロズレイド
マスキッパ
チュリネ
ドレディア(ヒスイ)
モンジャラ
モジャンボ
ドジョッチ
ナマズン
グレッグル
ドクロッグ
ラルトス
キルリア
サーナイト
エルレイド
ヤンヤンマ
メガヤンマ
ヒポポタス
カバルドン
パチリス
スカンプー
スカタンク
ヒメグマ
リングマ
ガチグマ
ヌメラ
ヌメイル(ヒスイ)
ヌメルゴン(ヒスイ)
イワーク
ハガネール
サイホーン
サイドン
ドサイドン
ウソハチ
ウソッキー
ベロリンガ
ベロベルト
トゲピー
トゲチック
トゲキッス
ナエトル
ハヤシガメ
ドダイトス
ポリゴン
ポリゴン2
ポリゴンZ
ゴース
ゴースト
ゲンガー
ミカルゲ
ヤミカラス
ドンカラス
アンノーン
タマザラシ
トドグラー
トドゼルガ
テッポウオ
オクタン
スコルピ
ドラピオン
ガーディ(ヒスイ)
ウインディ(ヒスイ)
ニャルマー
ブニャット
ワンリキー
ゴーリキー
カイリキー
ペラップ
ヨマワル
サマヨール
ヨノワール
ポッチャマ
ポッタイシ
エンペルト
タマンタ
マンタイン
バスラオ(白)
イダイトウ♂
イダイトウ♀
ロコン
ロコン(アローラ)
キュウコン
キュウコン(アローラ)
メノクラゲ
ドククラゲ
ケイコウオ
ネオラント
ブビィ
ブーバー
ブーバーン
コイル
レアコイル
ジバコイル
ドーミラー
ドータクン
エレキッド
エレブー
エレキブル
グライガー
グライオン
フカマル
ガバイト
ガブリアス
ノズパス
ダイノーズ
ビリリダマ(ヒスイ)
マルマイン(ヒスイ)
ロトム
ヒートロトム
ウォッシュロトム
フロストロトム
スピンロトム
カットロトム
リーシャン
チリーン
ムウマ
ムウマージ
ピィ
ピッピ
ピクシー
ニューラ
ニューラ(ヒスイ)
オオニューラ
マニューラ
ユキワラシ
オニゴーリ
ユキメノコ
ズガイドス
ラムパルド
タテトプス
トリデプス
ウリムー
イノムー
マンムー
カチコール
クレベース(ヒスイ)
ユキカブリ
ユキノオー
ゾロア(ヒスイ)
ゾロアーク(ヒスイ)
ワシボン
ウォーグル(ヒスイ)
リオル
ルカリオ
ユクシー
エムリット
アグノム
ヒードラン
レジギガス
クレセリア
トルネロス(化身)
トルネロス(霊獣)
ボルトロス(化身)
ボルトロス(霊獣)
ランドロス(化身)
ランドロス(霊獣)
ラブトロス(化身)
ラブトロス(霊獣)
ディアルガ
ディアルガ(オリジン)
パルキア
パルキア(オリジン)
ギラティナ(アナザー)
ギラティナ(オリジン)
アルセウス
フィオネ
マナフィ
シェイミ(ランド)
シェイミ(スカイ)
ダークライ
レジェンズアルセウス
ダイパリメイク
ソード / シールド
ピカブイポケモンGO
ウルトラサン/ムーン
オメガルビーアルファサファイア
X / Y
ブラック2ホワイト2
ハートゴールドソウルシルバー
ダイヤモンド/パール/プラチナ
ルビー/サファイア/エメラルド
ファイアレッドリーフグリーン
掲示板/チャット
無料ゲーム
イラスト
情報/その他
ポケモン図鑑アルセウス
ポケモンアルセウスのストーリー攻略
ポケモン図鑑ダイパリメイク
ポケモン図鑑ソードシールド
ポケモン育成論
ポケモンパーティ構築
個体値カリキュレーター
タイプ相性表
タイプバランスチェッカー
性格(せいかく)補正表
ポケモントレード(交換掲示板)
ポケモン図鑑アルセウス
詳細検索
種族値ランキング
ヒスイ図鑑ポケモン一覧
新ポケモンの色違い一覧
ストーリー攻略チャート
クリア後の攻略
アルセウスの戦い方・倒し方
ヒスイの夜明けの攻略
サブ任務の一覧と攻略
サブ任務94「ヒスイの化身たち」攻略
マップと出現ポケモン
オヤブン場所リスト
ともしびの場所
アンノーンの場所
時空の歪みの出現ポケモン
大量発生と色違いの発生条件・厳選
道具の効果と入手方法・レシピ
ぼんぐり・きのみ・たまいし場所
雑貨屋・イチョウ商会・農場
ふるいポエムの場所
タイプ相性表
性格(せいかく)補正表
技リストと効果一覧
ポケモン育成論
ポケモンパーティ構築
個体値計算ツール
タイプバランスチェッカー
耐久調整ツール
すばやさ調整ツール
個体値・種族値・努力値とは？
タマゴ技(遺伝技)/タマゴグループ
ポケモントレード(交換掲示板)
ポケモン知恵袋(質問投稿)
パーティ構築
```

問題点　ポケモン名前だけ取るつもりが他のものも取れてしまった。
だけど全部手動でやるよりはマシなり。

修正方法
わからん!!
追記 自動でできるのはここまでであとの細かいものは都度調整が必要だと思われ。