GASでスクレイピング その2
こんにちは。tarou5555です。
今回は、GASでスクレイピング その2~ヘッドレズブラウザと~です。
前回に続き日記です。
前回との違い
前回は、
html(ネット見てるときにF12キーを押すと出てくる文字)を取ってきて、その中の必要な情報だけを集める。
という内容でした。
今回も同じと言えばそうですが、マウスで押したり引いたりしないと表示されない情報が有る場合、前回の方法だけでは無理なのです。
例えば~、この~、数字とか~
マウスの位置によって切り替わるので、1足前とかは貰えない。
(伝わると思って上の画像を選んだけど、今回の対象ではない)
あとログインが必要な場合とか。
んじゃどうするの?
ヘッドレスブラウザを使います。
ヘッドレスなブラウザ。表示のないブラウザ。
表示がなぜヘッドなのかは知らない。
マウス操作しないと表示されないなら、マウス操作も自動ですればいいじゃない。ということ。
コンピュータ的には人間が見ないなら表示の手間を省いたほうが仕事が捗るようです。
PhantomJSCloud
↑これが今回利用したヘッドレスブラウザです。cloudと付いています。
ついてない物も有ります。モジュールとかそういう扱いで使うやつ。開発は終了しているようです。色々調べていたら他にSeleniumとかpuppeteerが有って、そっちのほうが新しそうでした。
でも今回はPhantomJSCloud。GASで使えるから。
(今考えるとGASのライブラリで探してないや。まあいいや。)
大変だったこと
PhantomJSCloudはCloudなので、インターネットの何処かにいるPhantomJSCloudちゃんに一旦目的のサイトを教えて、開いて⇒操作もした後の情報を貰います。
(ん?これヘッドレスなのか?もしかしたらPhantomちゃんは画面を見ているかもしれないし、こっちとしてはオールレスだが。)
Seleniumの場合、ヘッド有りでも使えます。なので「ここクリックしてね」と命令して、ちゃんと言う通りにしてくれているか一旦見て確認できます。
でもPhantomJSCloudは私にとってはオールレスなので、言ったとおりにしてくれているのか全く分からない。少なくとも返ってくる情報は欲しいものではない!でも改善方法もよく分からない!もう嫌!
何とかなった
できねーって思いながら、GASと連携できそうなGoogle Developers Consoleを触ってもっと意味わからねー、もう情報の多いpython+Seleniumで良いかー、これなら出来たーってやってる内に、なんとなく方法が浮かんでPhantomちゃんに頼んだら出来た。
具体的には、マウスオーバーで切り替わる情報だったので、マウスの移動で指定していた。が、対象のクリックにしたら出来た。
対象のクリック自体には意味は無いけど、狙いたい位置にマウスが移動したようだ!
注意点
公式サイトに無料でGet 500 Pages/Day って書いてあるけど、GASのトリガーで5分毎でほっといたら、20時間くらいで、無料の範囲は終わったよ!って返ってきていた。12*24=288なので足りてるはずなんだけど。
本当の目的はそんな頻度ではないので、ほったらかしで動いている。
やったぜ!
操作に合わせて連続で変化する情報を逐一取る場合は、一気に無料の範囲を消費してしまいそうだ。
学んだこと
諦めずに類似の何かを触っていると理解が深まる。
Phantomと聞くと、赤い骸骨を思い浮かべる。
qiitaはクイッタじゃなくて「キータ」。
TL;DRは今北産業の相方。