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を使用してみたら、また記事を書こうと思います。
最後までお読みいただきありがとうございました!