こんにちは、うーちゃんです。
年末に来たノートパソコンで色々やってる正月です。
そんな訳で、日常的に使えるものとして
Googleスプレッドシートで株の管理とかしてみたいなぁって思って
無謀にも自動取得にチャレンジしてみました。
えぇ、プログラミング歴はほぼゼロです、ご安心を。
まずこんな感じで作ってみようかなっと。
Excelで作ればいいじゃんって言われても、Excel入ってないしねぇ・・・
で、せっかくスプレッドシート使うわけだし、便利にしたいじゃなーい。
なんにせよスプレッドシートは無料と言うのが一番良い!
と言う訳で、さっそく進めていきたいな・・・・と
まず、コードのところ B2に、銘柄コードを入れたら会社名が
C2に表示するようにしたい。 えぇ、贅沢な悩みデス。
まずはどこの株にしようかなって思ったけど、
ホンダにしてみます、あくまで例題ですけどね。
ホンダの銘柄コードは
7267です。
早速 B2に書いてみます。
まぁ、何も起こりませんよね。書いただけですもの。
そこでどうするか、ネット界を彷徨いました。
その結果、importxml関数というものがあるのを知りました。
これです。 なんか小難しい説明文が書いてありますけど、
要は、指定したページの指定した場所をスクレイピングしてくるってものみたい
この後の()に(URL,XPath)を入れて使うみたい(たぶん)
XPathって何ぞや?ってお思いのアナタ、大丈夫です。
うーちゃんも分かっていません、ネットで調べたら書いてあったのです。
まぁ、論より証拠でやってみようと思います。
まずはどこのページから持ってくるかですが、
ネットではヤフーファイナンスが圧倒的に多かったです、
でも、ヤフーファイナンスはスクレイピング禁止を謳っているので
訴えるぞ等の嫌なメールとかが届かないように外したいと思います。
そうなると、株探が安心かなと言うことでいざ株探へ
ホンダのページへ来ました。
とりあえずURLをコピります。
ここのURLの銘柄コードは B2 に入れたコードにしたいので B2 に変えます。
うん、うまくいかねぇ(; ・`д・´)
これじゃ、ただ B2 の値を持って来ただけじゃん。 Xpath、Xpathが無いからか?
Xpathを調べてみたら、ざっくばらんに言うとWEBページ内の住所みたいなものだと、
うん、なるほどね URLでページを、Xpathでそのページ内の場所を指定するという
魂胆か、なかなかやるね。
よーし、Xpath の取り方を調べるぞー
・・・・・・
よし、まずは指定したページで・・・今回の場合は株探のホンダのページで
F12を押すんだって、(ただしクロームに限る、他のブラウザはすまん、探してくれ)
そうすると変なウインドウが開くから
これね、これが聞いたところHTMLというやつらしいんだ。
それで、この中から今回の欲しいところを見つけ出す、
うん、まぁ・・・・さっぱりだよ 頭痛くなってきたよ。
方法、探してきます。
よし、どうやらここをポチっとやって、指定する場所をポチるみたい
今回は会社名だから
ここをもって来よう、そうするとウインドウ内のクリックした場所のHTMLが
強調されます。
そしたら強調されたところを右クリック、Copy→Copy XPath をすれば
Xpathを取得できる。
それを IMPORTXML関数のURLの後ろに張ればいいわけだ。
やってみよう
ここで注意!
XPathをコピーすると //*[@id="kobetsu_right"]/div[4]/h3 が取れます。
これをIMPORTXML関数のURLの後に貼ると
=IMPORTXML("https://kabutan.jp/stock/?code=",B2),"//*[@id="kobetsu_right"]/div[4]/h3")
こうなりますけど、後半の*[@id="kobetsu_right"]のところに
ダブルクォーテーション、(" ←これね)があるんですが、
ダブルクォーテーションの中にダブルクォーテーションがあるのは
文法上、よろしくないみたいなんで、
シングルクォーテーション、( ' ←これね) にしておいてください。 つまり、
=IMPORTXML("https://kabutan.jp/stock/?code="B2),"//*[@id='kobetsu_right']/div[4]/h3")
です。そうすると
うん、エラーだね。 まぁ、ローマも1日にして成らずだからしょうがないよ。
そして、XPath 全然わからねぇ、まぁ、今は後回しだ
興味があればいずれ調べると思う。
何がいけないんだろう、とりあえずB2セル指定を元のコードに戻してみるか
=IMPORTXML("https://kabutan.jp/stock/?code=7267","//*[@id='kobetsu_right']/div[4]/h3")
これね。
あ、出来た( *´艸`)
と言う事は、B2のセルの値を持って来いって言うのがいけなかったんだね。
方法を考えよう。と言うか、ネット界に聞いてみよう。
おし、ネット界の荒波にもまれ情報をGETしてきましたぜ、
CONCATENATE"関数って言うのが必要らしい。
"CONCATENATE"関数って何ぞや?って言われると大変困るのですが、
どうやらセルとセルを結合する関数らしいです、&でも良いらしいけど
今回はカッコよく決めたいので関数使うぜ!
でも思うんですけど、高校の数学レベルで言わせてもらうと
セルを結合する関数とか言われても関数の使い方間違ってね?
としか思えないんですわ、もうウェポンとかに名前変えてほしい。
"CONCATENATE"ウェポンとかカッコよくね?
これから小学生にプログラミング教えるならこう言う気遣いが大事だと思うなぁ
愚痴ったところでやってみよう。
"CONCATENATE"関数はINPORTXMLの後に入れるらしいから
=IMPORTXML(CONCATENATE("https://kabutan.jp/stock/?code=",B2),"//*[@id='kobetsu_right']/div[4]/h3")
こうね、そうすると
できたぁ~(*´▽`*) 完璧や、結構嬉しい。
そうすると、同じようにして株価を持ってくればいいんやね。
と言う訳で D2セルですが、
とりあえず、ホンダのページは同じだから前半からURLまでは同じでしょ
違うのはXPath、
株価はここから持ってくるから、
HTMLの強調されたところをCopy, Copy XPathで取ってきて
=IMPORTXML(CONCATENATE("https://kabutan.jp/stock/?code=",B2),"//*[@id='stockinfo_i1']/div[2]/span[2])
[ ]内のダブルクォーテーションをシングルクォーテーションに直して
よし、これで行けるはず。
ダメや、秀吉のように城を一晩では築けない
まぁ、天下人じゃないし しょうがない、考えよう。
出来たぁ~(´Д⊂ヽ
原因が解ったよ、
ここのね、] と )の間に " を忘れたんだなぁ~
慣れてる人なら絶対に忘れないんだろうけど、超初心者っていうか
見習いコピペプログラマーにはダブルクォーテーションの意味なんか
知らないからね、ここまで来る間にも全角だったから動かなかったとか
普通にあるからね、皆さんも気を付けてね。
後は、増やしたい分だけコピペすればオッケー
我ながらよく頑張った。
こんな感じにコピペで増やせるよ。
ただ、スクレイピングはサーバーに負荷をかけたりして
禁止してるページもあります。
この記事を書く前に株探さんも調べたのですが、
書いてる途中に禁止になってるかもしれない可能性があるのが
現実の世知辛さです。
まぁ、これくらいのスクレイピングは大した負荷にならないだろうと
思ってしまうんですけど、あくまで自己判断と自己責任で行ってください。
やる前に一応調べてみることをお勧めします。
今回は例題として使ったので、何かあっても責任は負えません。
作ってみて思ったこと。
これって、すごく便利じゃね?
PCで関数を入れて形にしておけば
外からスマホで見たり、銘柄コード入れて調べたりもできるし、
PERとかも持ってきちゃえば、売買の指標にもなったりするかも
株式投資が捗るんじゃね?
そして、今の情報社会 ネットで調べてコピペるだけで
スクレイピングとかできちゃうんだなぁって言うのに驚きです。
時間があったらまた何か作ってみたいなぁ。