アプリ版:「スタンプのみでお礼する」機能のリリースについて

GASでスクレイピングを勉強し始めました。
データを取得するのに、できないサイト(?)でつまづいています。
※取得するのにライブラリで[Parser]を使用しています。

取得しようと思っているサイト
'nisa.morningstar.co.jp/fund_list.html
の順位やファンドなどのテーブル

やってみたこと
var morningstarURL0 = nisa.morningstar.co.jp/fund_list.html;
var morningstarHTML0 = UrlFetchApp.fetch(morningstarURL0).getContentText();
var morningstar0 = Parser.data(morningstarHTML0).from('<table data-table="index">').to('</table>').iterate();
var morningstar1 = Parser.data(morningstar0[0]).from('<tbody id="nisa_table_1">').to('</tbody>').iterate();

上記のコードだとmorningstar1 は<thead></thead>の間のデータしか取れませんでした。


ちなみに、スプレッドシート関数で
=IMPORTDATA("nisa.morningstar.co.jp/fund_list.html")
とやるとセル内に
<tbody id="nisa_table_1"></tbody>
となり、取得したいデータたちが表示しません。

そもそも取得できないサイトなのか、勉強不足でコードがよくないのか、他の方法で取得するのか、わからなくなってきました。

何が問題なのか、どうすればうまく取得できるのか、教えていただけたらと思います。
よろしくお願いします。

A 回答 (2件)

こんにちは



回答がつかないみたいなので・・・

サーバにURL指定でリクエストした際に返される内容は、ブラウザの「ソースを表示」で表示される内容と基本的に同じです。
ご提示のページの「ソース」を見てみればわかると思いますが、テーブルの内容は項目タイトル部分は記載されていますが、tbodyにあたる部分は記載されていない状態です。
ご提示のコードではこれをもとに解析しているので、内容が取得できないということになっています。

一方で、実際のブラウザの表示では、上記のソースに当たるものを一旦表示してから、javascriptでサーバと通信をしてテーブルの内容に当たる部分を追加・表示するような仕組みになっています。
全体の表示形式は変わらないけれど、一部のデータだけいろいろ入れ替わる(ご質問のテーブル内)ような情報の場合に、変化するたびにページ全体のソースをメンテナンスするよりも、変化するデータだけ別に管理して、その部分だけメンテナンスする方式の方が便利なので、このような方式を取っているものと考えられます。
(似たような仕組みのサイトは数多くあります)

ですので、お求めの情報を取得するためにはソース内のスクリプトと同様の処理を行う必要があります。
多くのサイトでは外部からのこのような利用のためにAPIを公開している場合もありますが、ご提示のサイトの場合は「許可なく複製、転載、引用することを禁じます。」との記載がありますので、公開はしていないのではないかと思われます。(←ちゃんと探したわけではありませんので、推測です)

試しに、ソースに示されている内容でサーバにアクセスしてみると、テーブルの内容に当たるjsonデータが返されるので、この仕組みを利用すればデータの取得はできるものと考えられます。
とは言え、上記の理由から、必ずしも正しい方法とは言い難い可能性がありますので、これ以上の詳細な記述は避けておきます。
(上記の制限は「無断で」との条件がありますので、許可を得ればOKとも読み取れます)

サイト側が完全に防止しようとするなら、外部からの直接のアクセスは排除するといった方法も取れるので、そこまでは行っていないということでしょうか。
まぁ、そのような場合であっても、ブラウザを自動操作する方法をとることで情報を取得することは不可能ではありませんので、WEB公開情報である限りはそこまでは拘ってはいないってことかと思います。

回答になっているのかいないのかわかりませんが、ご参考までに。
    • good
    • 0
この回答へのお礼

回答になっています!

GASのスクレイピングでやってみればだいたいは可能、という浅知恵でした。
jsonデータのこと(はじめて知りました;)も勉強していきたいと思います。

回答ありがとうございました。

お礼日時:2020/11/21 13:08

Yahoo!知恵袋の方が回答が付くと思います。

    • good
    • 0
この回答へのお礼

なるほど!
知恵袋のほうでも投稿してみます。
ありがとうございました。

お礼日時:2020/11/18 07:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!