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を抽出します。