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)

}

 

 

2022/01,江端さんの技術メモ

Posted by ebata