golangのgoqueryでスクレイピング(データ収集)する方法(その2)
Pythonのスクレイピングを、Golangで記述してみる。
まずpythonの記述です。
# -*- coding: utf-8 -*-
from pyquery import PyQuery
q = PyQuery('https://kabutan.jp/stock/?code=7203')
sector = q.find('#stockinfo_i2 > div > a')[0].text
print(sector)
これでターゲットとなるhtml部分は、多分ここ
<div id="stockinfo_i2">
<dl>
<dt>業績</dt>
<dd><img src="/images/cmn/gyouseki_2.gif" title="今期予想" /></dd>
</dl>
<div>
<a href="/themes/?industry=17&market=1">輸送用機器</a>
</div>
これをgolangで実現するには、このようにコーディングするようです。
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
)
func main() {
//get_url_info, err := goquery.NewDocument("https://profile.yahoo.co.jp/search/?w=トヨタ自動車")
get_url_info, err := goquery.NewDocument("https://kabutan.jp/stock/?code=7203")
if err != nil {
fmt.Println("get html NG")
}
//result := get_url_info.Find("div > div > table > tbody > tr > td")
//result := get_url_info.Find("div > div > a")
result := get_url_info.Find("#stockinfo_i2 > div > a")
result.Each(func(index int, s *goquery.Selection) {
fmt.Println(s.Text())
})
}
出力結果は以下の通りです。
ebata@DESKTOP-P6KREM0 MINGW64 ~/kese/gonet-html
$ go run main3.go
輸送用機器
こうやると、もっと簡単にできそう。
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
)
func main() {
q, err := goquery.NewDocument("https://kabutan.jp/stock/?code=7203")
if err != nil {
fmt.Println("get html NG")
}
name := q.Find("div.company_block > h3").Text()
fmt.Println(name)
code_short_name := q.Find("#stockinfo_i1 > div.si_i1_1 > h2").Text()
fmt.Println(code_short_name)
market := q.Find("span.market").Text()
fmt.Println(market)
unit_str := q.Find("#kobetsu_left > table:nth-child(4) > tbody > tr:nth-child(6) > td").Text()
fmt.Println(unit_str)
sector := q.Find("#stockinfo_i2 > div > a").Text()
fmt.Println(sector)
}