Google検索結果をWebスクレイピングする方法。

林竜佑です。

Googleの検索結果の順位を自動でスプレッドシートに書き出せたらなー
って考えることはあると思います。

結論で言うとGoogleが禁止しているためWebスクレイピングは出来ないのですが、
Google Custom Search APIというサービスを利用することでWebスクレイピング可能です。

ただし、Google検索を手動で行った結果とは若干異なることがあります。
結果が異なる理由はイマイチわからないですが、
参考にはなるので利用してみてはいかがでしょうか。


それでは早速以下にスプレッドシートに検索結果を自動で書き出すGASを記載します。

function fetchGoogleSearchResults() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var keywords = sheet.getRange("A1:E1").getValues()[0]; // A1〜E1セルからキーワードを取得

  // Google Custom Search APIのエンドポイント
  var apiUrl = "https://www.googleapis.com/customsearch/v1";
  // Google Custom Search APIのキー
  var apiKey = "あなたのAPIキー"; // 提供されたAPIキーを使用
  // Google Custom Search EngineのID
  var cx = "あなたの検索エンジンID"; // 変更された検索エンジンIDを使用
  // 検索結果の取得数
  var numResults = 10;

  // 各キーワードについて検索結果を取得
  for (var col = 0; col < keywords.length; col++) {
    var keyword = keywords[col];
    if (!keyword) {
      Logger.log("No keyword provided in column " + (col + 1));
      continue;
    }

    // グループごとに検索結果を取得
    for (var startIndex = 1; startIndex <= 50; startIndex += 10) {
      // APIリクエストのURLを構築
      var requestUrl = apiUrl + "?key=" + apiKey + "&cx=" + cx + "&q=" + encodeURIComponent(keyword) + "&num=" + numResults + "&start=" + startIndex;

      // リクエストURLをログに出力
      Logger.log("Request URL: " + requestUrl);

      // APIリクエストを送信
      var response = UrlFetchApp.fetch(requestUrl);
      var data = JSON.parse(response.getContentText());

      // 検索結果をスプレッドシートに記録
      var results = [];
      if (data.items) {
        for (var i = 0; i < data.items.length; i++) {
          var item = data.items[i];
          var title = item.title;
          var url = item.link;
          var linkedTitle = '=HYPERLINK("' + url + '","' + title + '")'; // タイトルにURLのリンクを埋め込む
          results.push([linkedTitle]);
        }
      } else {
        Logger.log("No items found in response");
      }

      // タイトルとURLを2行目以降に記録
      if (results.length > 0) {
        sheet.getRange(startIndex + 1, col + 1, results.length, 1).setFormulas(results);
      }
    }
  }
}


これでやっていることはスプレッドシートの
A1〜E1セルにそれぞれ検索結果を知りたいワードを記載し、A2〜E2以降に検索結果50位までを記載するようにしています。

検索結果はタイトルにURLをリンクさせています。
また、50位まで一気に取得しようとするとエラーが多発するので、10位ずつ取得するようにしています。


「あなたのAPIキー」「あなたの検索エンジンID」は
各自のユニークなモノとなっているためご自身で入力してください。
なお、Google Custom Search API、Google Custom Search Engineは
Google Cloud Platform上で利用可能なため、これらを利用できるようにしてください。
方法は調べたら色々出てくるので、検索してみてください。

この記事が気に入ったらサポートをしてみませんか?