Googleスプレッドシートで日本株の配当利回りを取得する

GoogleスプレッドシートのIMPORTXML関数を使って[Google Finance](https://www.google.com/finance/)から日本株の配当利回りを取得します。
今回は［2914］日本たばこ産業(JT)の配当利回りを取得してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/4d90ae66-6cef-2347-3b04-5bd855d31b3c.png)

# IMPORTXML関数について
IMPORTXML関数の詳細は過去の記事をご参照頂ければ幸いです。
[Google Finance から日本株の証券情報を取得する](https://qiita.com/WhimsicalTheo/items/031e98397bda7c9aa46f)

# IMPORTXML関数の引数
IMPORTXML関数の引数に指定する URL と XPath を確認します。

## URL
［2914］日本たばこ産業(JT)の証券情報は以下URLで確認できます。
https://www.google.com/finance/quote/2914:TYO?hl=ja

## XPath
ブラウザから対象URLにアクセスして配当利回りのXPathを確認します。
今回もGoogle ChromeでXPathを確認してみます。

**1. 開発ツールを表示する**
"F12"キーを押して開発ツール(Chrome DevTools)を開きます。
（ブラウザ画面上の何も無いところを右クリックして"検証"を選択しても大丈夫です。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/56165a5e-98d2-d409-02d2-5b92d30d9962.png)

**2. Webサイトのソースから、配当利回りの位置を確認する**
配当利回りにマウスカーソルを合わせて右クリックして"検証"を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/22f6b35c-0761-b033-c37f-62234245dcf8.png)

すると、開発ツール側のWebサイトのソースがハイライトされます。
これが配当利回りの位置になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/f48a0ed4-255a-dc34-bd36-1ef0b35b2dd6.png)

**3. 配当利回りのXPathを確認する**
ハイライトされた部分を右クリックして Copy -> Copy XPath の順に選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/15d92078-be8c-9fde-7191-128620920ad7.png)

クリップボードにXPathがコピーされたので、一旦テキストファイル等にXPathを貼り付けてみます。
<code>//\*[@id="yDmH0d"]/c-wiz/div/div[4]/div/div/main/div[2]/div[2]/div[7]/div</code>

**先頭の<code>//\*[@id="yDmH0d"]</code>に含まれるダブルクォーテーションは、IMPORTXML関数に入れる際には文字列として認識させる必要があるため、ダブルクォーテーションを2つ続けて入力します。**
<code>//\*[@id="yDmH0d"]</code>
　　　　↓
<code>//\*[@id=""yDmH0d""]</code>

【参考】
[グーグルスプレッドシートの関数で『ダブルクォーテーション（”）』を文字列として認識させる方法](https://qiita.com/tamaki_ikamat/items/bcf28b195e3f8546b6e1)

IMPORTXML関数の引数を整理すると以下の通りになります。

| 引数                    | 値                                                                            |
|:------------------------|:------------------------------------------------------------------------------|
| 第一引数 - URL          | "https://www.google.com/finance/quote/2914:TYO?hl=ja"                         |
| 第二引数 - XPath クエリ | "//\*[@id=""yDmH0d""]/c-wiz/div/div[4]/div/div/main/div[2]/div[2]/div[7]/div" |

# スプレッドシートにIMPORTXML関数を入力
IMPORTXML関数に引数を指定してスプレッドシートに入力します。
<code>=IMPORTXML("https://www.google.com/finance/quote/2914:TYO?hl=ja","//\*[@id="yDmH0d"]/c-wiz/div/div[4]/div/div/main/div[2]/div[2]/div[7]/div")</code>

エラーになりました。
XPathが深過ぎて正しく認識できないのでは？と勝手に想像しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/6591d866-0ac8-2aca-fa4c-d5325757c7df.png)

# エラーの解消方法
XPathを編集してエラーを解消します。
先ほどハイライトされた部分を改めて確認します。

```html
<div class="P6K39c">6.10%</div>
```
となっているので、第二引数のXPathを<code>//\*[@class=""P6K39c""]</code>に置き換えます。
<code>=IMPORTXML("https://www.google.com/finance/quote/2914:TYO?hl=ja","//\*[@class=""P6K39c""]")</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/e3fd9bf8-ed98-2619-c518-15a1bf0e37d2.png)

エラーは解消しましたが、配当利回りは取得できていません。
<code>//\*[@class=""P6K39c""]</code>が複数あるようです。
もう少し上の階層<code>div class="eYanAe"</code>から見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/fb29e3da-1e6c-85f8-1c76-dea845d9652c.png)

XPathを書き出してみます。

```html
<div class="eYanAe" role="region" aria-labelledby="key-stats-heading">　※XPath：//*[@class="eYanAe"]
    <div class="vvDK2c">...</div>        ※XPath：//*[@class="eYanAe"]/div[1]
    <div class="gyFHrc">...</div>        ※XPath：//*[@class="eYanAe"]/div[2]
    <div class="gyFHrc">...</div>        ※XPath：//*[@class="eYanAe"]/div[3]
    <div class="gyFHrc">...</div>        ※XPath：//*[@class="eYanAe"]/div[4]
    <div class="gyFHrc">...</div>        ※XPath：//*[@class="eYanAe"]/div[5]
    <div class="gyFHrc">...</div>        ※XPath：//*[@class="eYanAe"]/div[6]
    <div class="gyFHrc">...</div>        ※XPath：//*[@class="eYanAe"]/div[7]
        <div class="P6K39c">6.10%</div>  ※XPath：//*[@class="eYanAe"]/div[7]/div
```

XPathをIMPORTXML関数に入れてみます。
※ダブルクォーテーションを2つ続けることを忘れずに。
<code>=IMPORTXML("https://www.google.com/finance/quote/2914:TYO?hl=ja","//\*[@class=""eYanAe""]/div[7]/div")</code>

［2914］日本たばこ産業(JT)の配当利回りを取得できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/5793425c-c465-8b87-9409-3c25c4985d68.png)

# APPENDIX
配当金を出していない銘柄の場合、配当利回りは<code>-</code>と表示されます。
複数銘柄の情報を一覧表示させる場合、<code>-</code>ではなく<code>0.00%</code>とした方が都合が良い場合があるかと思います。
そういった場合、以下のようにSUBSTITUTE関数とTEXT関数も組み合わせて<code>-</code>を<code>0.00%</code>に置換することができます。
<code>=SUBSTITUTE(IMPORTXML("https://www.google.com/finance/quote/2914:TYO?hl=ja","//\*[@class=""eYanAe""]/div[7]/div"),"-",TEXT(0,"0.00%"))</code>

https://support.google.com/docs/answer/3094215?hl=ja

https://support.google.com/docs/answer/3094139?hl=ja

以上、最後まで読んでいただき、ありがとうございました。