ここから本文です

GoogleスプレッドシートのimportXML関数に関して質問です。

em_********さん

2019/5/2822:44:54

GoogleスプレッドシートのimportXML関数に関して質問です。

importXML関数をGoogleの検索結果をスクレイピングできるということで
以下のような数式で試してみたのですがエラーがかえってきて
検索結果の表示がされません。

=IMPORTXML("http://www.google.co.jp/search?hl=jp&gl=JP&q="&A1,"//div[@id='res']//h3[@class='r']/a/@href")
※A1に検索するキーワードを入れた場合

作成した当初は、上記の式で検索結果を取れたり取れなかったりと
不安定だったのですが、ここ最近全くとれなくなってしまいました。

お手数ですが、スプレッドシートに詳しい方いましたら
お教えいただけると幸いです。

よろしくお願いいたします。

importXML,importXML関数,href&quot,インターフェース,スクレーピング,'res',UserAgent

閲覧数:
45
回答数:
3
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

gek********さん

2019/5/2920:09:09

とりあえず、当方の環境で少し実験したところでは、div[@id='res']も、h3[@class='r']も、該当するものがなく、空になりました。
Google スプレッドシートから、アクセスした場合の UserAgent は

Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)

で固定だと思います。
そして、Google検索は、上記の UserAgent の場合、他の UserAgent の場合とは異なるレスポンスを返します。
なので、ソースを確認するなら、上記の UserAgent を使って取得しないと無意味です。

当方では XPath を
//div[@class='jfp3ef']/a/@href
にすれば、一応取得できました。(h3[@class='r']に相当する部分は、div[@class='jfp3ef']になっていました。)

ただし、このクラス名( jfp3ef )はもしかしたら、アカウント毎に違うのかもしれませんし、もしかしたら乱数か何か使ってランダムに変更されているのかもしれません。そうだとしても、HTMLを取得して、解析することでクラス名を抽出できますから、回避は難しくないと思います。

余談ですが、利用規約について。
記述が曖昧ですが、明確に禁止とは書かれていない気はします。
「Googleが提供するインターフェースおよび手順以外の方法による本サービスへのアクセスを試みてはなりません。」
とはありますが、GoogleスプレッドシートはGoogleが提供しています。
そして、UserAgentを調べ、Googleスプレッドシートからのアクセスであることを確認した上で、専用のレスポンスを返しています。
スクレイピングをさせたくないなら、エラーを返すか、空のレスポンスを返せば済むことです。
わざわざ、専用のインターフェースおよび手順で、専用のものを返しているのはGoogleです。
このインターフェースは、どちら様が提供されているというのでしょうか。

ただし以前は御質問の XPath で取得できていたということですので、簡単にはスクレイピングできないようにハードルを上げたということでしょう。
これでも大量のリクエストをするような人が増えるようだと、Googleさんも、もっと本気で、対策するかもしれません。
節度を持って利用していただくことを御願いいたします。

  • 質問者

    em_********さん

    2019/5/2922:57:16

    記載いただいた方法で解決しました!
    ありがとうございます。

    おっしゃる通り、一定期間でなにか変えてるようですね。

    本当にありがとうございます。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

bac********さん

2019/5/2907:25:02

Googleは http のサポートを止めていて、https にリダイレクトしますので、そこでエラーになるのでしょう。

読み込もうとしているURLは http になってますが、これを https に変えてみてください。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

tri********さん

2019/5/2901:54:21

Google検索のスクレイピングはGoogleのサイト利用規約違反です。

https://policies.google.com/terms?hl=ja

””本サービスを不正に利用しないでください。たとえば、本サービスの妨害や、Google が提供するインターフェースおよび手順以外の方法による本サービスへのアクセスを試みてはなりません。ユーザーは、法律(輸出、再輸出に関して適用される法規制を含みます)で認められている場合に限り、本サービスを利用することができます。ユーザーが Google の規約やポリシーを遵守しない場合、または Google が不正行為と疑う行為について調査を行う場合に、Google はユーザーに対する本サービスの提供を一時停止または停止することができます。””

これの "Google が提供するインターフェースおよび手順以外の方法による本サービスへのアクセスを試みてはなりません。" に該当します。
スプレッドシートによるGoogle検索結果の情報取得はGoogleが提供するインターフェースおよび手順以外によるアクセスです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる