GoogleスプレッドシートのIMPORTXMLという関数で、簡単にスクレイピング出来る。
けど、テスト環境などはBASIC認証をかけている場合が多く、その状態でも確認したい場合は、IMPORTXMLだけでは無理っぽい。
Google Apps Scriptを使用したら、出来るらしい。 blog.halt.project-p.jp
手順
1.Google Apps Scriptを書く。
/*
* メタ情報を取得する
* path - ドメイン以下のURLパス
* type - titleなど何を取得するか
*/
function getMeta(path, type) {
// 現在表示しているスプレッドシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
// ドメインとBASIC認証のID、PWは、スプレッドシートのC4、C5、C6に記載した。
var domain = sheet.getRange("C4").getValue();
var user = sheet.getRange("C5").getValue();
var pass = sheet.getRange("C6").getValue();
// BASIC認証対応
var options = {
"headers" : {"Authorization" : " Basic " + Utilities.base64Encode(user + ":" + pass)}
};
var response = UrlFetchApp.fetch(domain + path, options);
var content = response.getContentText("UTF-8");
var text = "";
if ( type.match(/title/) ) {
// titleタグ取得
var titleMatch = content.match(/<title>([\s\S]*)<\/title>/i);
var title = getFirstValue(titleMatch);
text = title;
} else if ( type.match(/description/) ) {
// description取得
var descMatch = content.match(/meta\s+name=['"]description['"]\s+content=['"](.+)['"]/i);
var description = getFirstValue(descMatch);
text = description;
} else if ( type.match(/keywords/) ) {
// keywords取得
var keywordsMatch = content.match(/meta\s+name=['"]keywords['"]\s+content=['"](.+)['"]/i);
var keywords = getFirstValue(keywordsMatch);
text = keywords;
}
// Logger.log(text); // エディタ上でcommand + Enterで、logが見れる
return text;
}
// マッチする最初の要素を返す
function getFirstValue(values) {
return values && values.length > 1 ? values[1] : '';
}
2.スプレッドシートからGoogle Apps Scriptを呼び出す
- スクレイピングした文字列を反映したいセルに、1で書いたGoogle Apps ScriptのgetMeta関数を記入する(第1引数がドメイン以下のURLパス、第2がtitleなど何を取得するか)
=getMeta($C10, "title")