Google Apps Script でクローラーを作る

最初に言っておきたいのですが、GASには一日の実行可能時間に制限があるため、1日中クローラーを動かすようなことはできません。
「サービスで 1 日に使用しているコンピュータ時間が長すぎます」とエラーメールが来ます。
時間については以下のトリガーの合計実行時間を参照してください。
QUOTA LIMITS

処理の流れ

基本的にやることはhtmlをフェッチしてきて、正規表現で取得したい情報を抽出するだけです。
GASで使えそうなhtmlパーサーなどは見つかりませんでした。XmlService.parseでやろうとするのはありましたが、HTMLをXmlパーサーでパースできません。

なので基本的な形は以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function myFunction() {  
//エラーコードを取るためには muteHttpExceptions を trueにする必要がある。これがないとそのまま落ちる
var response = UrlFetchApp.fetch('http://kido0617.github.io/', {"muteHttpExceptions": true});
if(response.getResponseCode() >= 400){
Logger.log(response.getResponseCode());
return;
}

// htmlが取れるのであとは正規表現使って抽出していくだけ
var html = response.getContentText('UTF-8');

//抽出できたら、スプレッドシートに追加していく

//アクティブなシートを取得。あるいはシート名で取得可能 spreadsheet.getSheetByName("シート1");
var sheet = SpreadsheetApp.getActiveSheet();
//appendRowすると最後の行に追加できる
sheet.appendRow(['抽出結果A', '抽出結果B'])
}

また、GASは1回の実行時間が6分間で制限されていますが、これはトリガーを使うことで解決できます。
Google Apps Script で6分以上の処理をするを参照してください。

クロールする際、サイトに負荷かけないように処理をスリープするのは以下で可能です。

1
Utilities.sleep(5000);  //ミリ秒