Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Go言語でのWebスクレイピング

以前、PythonでWebスクレイピングを行いました。
elsammit-beginnerblg.hatenablog.com

今回はPythonではなくGo言語で実施してみたいと思います!!



■事前準備

go言語でWebスクレイピングを用いるにあたり、
github.com/PuerkitoBio/goquery
を用います。

使用書や使い方についてはドキュメントはこちらに用意されております。
https://godoc.org/github.com/PuerkitoBio/goquery

こちらのライブラリを、

go get github.com/PuerkitoBio/goquery

にてインストールを行います。

■go言語でのWebスクレイピング

では、先ほどのライブラリを用いてWebスクレイピングを行います。

全体コードはこちらになります。

package main

import (
	"fmt"
	"github.com/PuerkitoBio/goquery"
)

func main() {
	get_url_info, err := goquery.NewDocument("検索したいURL")
	if err != nil {
		fmt.Println("get html NG")
	}

	result := get_url_info.Find(検索対象タグ)
	result.Each(func(index int, s *goquery.Selection) {
		fmt.Println(s.Text())
	})
}

となります。
pythonの場合と同じですね。

get_url_info, err := goquery.NewDocument("検索したいURL")
if err != nil {
	fmt.Println("get html NG")
}

にてhtml文を収集します。
もしURLが誤っている等、htmlが収集できなかった場合にはerrに値が入ります。
そして、

result := get_url_info.Find(検索対象タグ)
result.Each(func(index int, s *goquery.Selection) {
	fmt.Println(s.Text())
})

にて抽出したいタグを指定し、指定したタグで抽出出来た文字列を.Eachにてそれぞれ
s(*goquery.Selection)に格納されます。

最終的に

fmt.Println(s.Text())

にてバラバラにした抽出文字列群を表示させます。

例えば、、、

package main

import (
	"fmt"
	"github.com/PuerkitoBio/goquery"
)

func main() {
	get_url_info, err := goquery.NewDocument("https://profile.yahoo.co.jp/search/?w=トヨタ自動車")
	if err != nil {
		fmt.Println("get html NG")
	}

	result := get_url_info.Find("div > div > table > tbody > tr > td")
	result.Each(func(index int, s *goquery.Selection) {
		fmt.Println(s.Text())
	})
}

とすると、

トヨタ自動車(株)
7,744
+58

ここに自社のIR情報を掲載することができます

特色
4輪世界首位級、国内シェア4割超。日野、ダイハツを傘下。SUBARU、マツダ、スズキと提携

~~~

といった結果が得られます。

■おまけ

result := get_url_info.Find(検索対象タグ)

の検索対象タグについてですが、、、

result := get_url_info.Find("div > div > table > tbody > tr > td")

といったように、">"でつなげるとタグの配下を指します。
例えば、

("div > div > table > tbody > tr > td")

の場合には、div配下のdiv配下のtable配下のtbody配下のtr配下のtdタグを抽出という形になります。

result := get_url_info.Find("div.selectFinTitle")

とすると、タグのclassを指します。
今回の場合にはclassがselectFinTitleのdivを抽出します。

■最後に

pythonに引き続きgo言語についてもまとめてみました。
少しずつスクレイピングについて分かってきました。
使ってみたいけど、、、サイトに負荷かけることになり迷惑をかけてしまうので、、、使うときは注意します!!