GASでスクレイピングを実行する時のメモ

GASを使って、スクレイピングをしてので、そのメモを残しておこうと思います。

スクレイピングして、Reactのフロント画面に結果を表示する一通りの処理は試してみたので、よければ見てください。

Parserを使用する

スクレイピングをするためにGASのライブラリであるParserを使用します。

  • GASのエディター画面で、ライブラリの+を押す

  • スクリプトIDに「1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw」を入れるとParserが出てくるので、「追加」する

コード

// マルツ(https://www.marutsu.co.jp/)から在庫データをスクレイピング
function scraping(url="https://www.marutsu.co.jp/pc/i/2551746/"){
  // URLを指定
  const response = UrlFetchApp.fetch(url);
  // 指定した文字コードで読み込む
  const text = response.getContentText("utf-8");
  console.log(text);

  // 提携先在庫が記載されているブロックを読み出す
  let topic_zanSuu = Parser.data(text).from('class="digiKeyStockNum">').to('</span>').build();
  // 部品名が記載されているブロックを読み出す
  const topic_title = Parser.data(text).from('class="modelNo">').to('</span>').build();
  // 在庫が提携先のパターンと自社在庫のパターンがあるので、提携先がないときは自社在庫のブロックを読み出す
  // 判定には取得したデータの文字列数で判定する。提携先がない場合はすべてのデータが読み出させるので文字列長が長くなる
  console.log(topic_zanSuu.length);
  if (topic_zanSuu.length >= 1000){
    topic_zanSuu = Parser.data(text).from('class="stockNum">').to('</span>').build();
  }
  if (topic_zanSuu.length >= 1000){
    topic_zanSuu = 0;
  }
  console.log(topic_zanSuu);
  console.log(topic_title);
  // 部材名と在庫数を返答する
  return {topic_zanSuu,topic_title};
}
  • URLとサイトを読み込むときの文字コードを指定する

  • 欲しい情報を囲んでいるタグを探して、<タグ>欲しい情報</タグ>のタグを指定して欲しい情報を取得する

  • タグは同じタグが複数ある場合は、最初に探索されたものが返ってくる

  • ParserだけだとJavascriptによる動的なWebページはスクレイピングできない

Javascriptによる動的なWebページをスクレイピングするには、PhantomJsCloudのAPIを使用すればできるらしい(まだしたことはないです)

PhantomJsCloudのAPIを使用してみたら、また記事を書こうと思います。

最後までお読みいただきありがとうございました!

いいなと思ったら応援しよう!