値をメール送信する
今回は値をメール送信する方法の説明です。
定期的にスクレイプしたデータや、エラーが発生したときにメールを送信するようにしておくと便利です。
function myFunction() { MailApp.sendEmail({ //送信先 to: 'xxxxxxxxxxxxxx@gmail.com', //メール件名 subject: 'subject', //メール本文 body: 'body', }); }
簡単ですね!
値をテキストファイルに書き出す
今回は値をテキストファイルに書き出したいと思います。
書き出すフォルダのIDは、https://drive.google.com/drive/u/1/folders/から右側の部分です。約40文字ぐらいの文字列です。
文字列をxxxxxxxxxxxxxxxxxxxxxxxxxxxxにコピペします。
function myFunction() { //書き出すフォルダIDを指定 var folder = DriveApp.getFolderById('xxxxxxxxxxxxxxxxxxxxxxxxxxxx'); //ファイル書き出し folder.createFile('fileName', 'filebody!', MimeType.PLAIN_TEXT); }
なんて簡単!実行しフォルダをみると、ファイルが書き出されています!
ファイルを開けてみると、うまくいってます。
値をスプレッドシートから読み込む
今回はスプレッドシートからセルの値を読み込みたいと思います。
「Sheet1」シートのA1とA2の値を読み込みます。
以下がスクリプトとなります。
function myFunction() { //対象シートを指定 var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1'); //値を読み込む var str1 = sheet.getRange(1, 1).getValue(); var str2 = sheet.getRange(2, 1).getValue(); Logger.log(str1); Logger.log(str2); }
ログ見てみ見ると、、うまくいっています!簡単ですね!
複数のページから複数の項目取得
今回は複数のページから複数の項目を取得したいと思います。前回もお世話になったwikipediaさんのページを取得します。
大量のページを取得する場合、どうしても対象のサーバーに負荷をかけることになります。
そのため各個人の常識が求められます。他人に迷惑をかけてはいけません。サーバーにも迷惑をかけてはいけませんよね!
ここでURLを見てましょう。
https://ja.wikipedia.org/wiki/1
「1」のページURLを見ると最後のパスが「1」になっています。ここを「2」にすると「2」のページのURLになります。ブラウザで確認しましょう。
https://ja.wikipedia.org/wiki/2
はい、URLを一部変えることで1と2、3のページを取得できそうです!
function myFunction() { //urlを指定 var url = 'https://ja.wikipedia.org/wiki/'; //3回ループを繰り返し for(var i=1; i<=3; i++){ //htmlソースを取得 var response = UrlFetchApp.fetch(url + i).getContentText(); //配列を初期化 var array = []; //取得する目次1のタブを指定 var Regexp = /<span class=\"tocnumber\">1<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji1 = response.match(Regexp)[1]; array.push(mokuji1); //取得する目次2のタブを指定 var Regexp = /<span class=\"tocnumber\">2<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji2 = response.match(Regexp)[1]; array.push(mokuji2);//配列に追加 //取得する目次3のタブを指定 var Regexp = /<span class=\"tocnumber\">3<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji3 = response.match(Regexp)[1]; array.push(mokuji3);//配列に追加 //取得する目次4のタブを指定 var Regexp = /<span class=\"tocnumber\">4<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji4 = response.match(Regexp)[1]; array.push(mokuji4);//配列に追加 //取得する目次5のタブを指定 var Regexp = /<span class=\"tocnumber\">5<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji5 = response.match(Regexp)[1]; array.push(mokuji5);//配列に追加 Logger.log(array); } }
ログとみてみましょう!うまくいっています!
1ページから複数の項目を取得
今回は、1ページから複数の項目を取得する方法を説明します。
Wikipediaさんから「1」を説明したページの目次1,2,3,4,5を出したいと思います。
https://ja.wikipedia.org/wiki/1
前回と同じように右クリックをし、ソースを覗きます。
目次の1で欲しいのは、「数としての1」という文字列部分です。検索すると出てきます。
<span class="tocnumber">1</span> <span class="toctext">数としての1</span
ここのタブ部分をとれば、目次1が取得できそうです。目次の2は、
<span class="tocnumber">2</span> <span class="toctext">数字としての1</span
を取得すれば、うまくいきそうです。同様に3,4,5のタブを取得していきます。
function myFunction() { //urlを指定 var url = 'https://ja.wikipedia.org/wiki/1'; //htmlソースを取得 var response = UrlFetchApp.fetch(url).getContentText(); //配列を初期化 var array = []; //取得する目次1のタブを指定 var Regexp = /<span class=\"tocnumber\">1<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji1 = response.match(Regexp)[1]; array.push(mokuji1); //取得する目次2のタブを指定 var Regexp = /<span class=\"tocnumber\">2<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji2 = response.match(Regexp)[1]; array.push(mokuji2);//配列に追加 //取得する目次3のタブを指定 var Regexp = /<span class=\"tocnumber\">3<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji3 = response.match(Regexp)[1]; array.push(mokuji3);//配列に追加 //取得する目次4のタブを指定 var Regexp = /<span class=\"tocnumber\">4<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji4 = response.match(Regexp)[1]; array.push(mokuji4);//配列に追加 //取得する目次5のタブを指定 var Regexp = /<span class=\"tocnumber\">5<\/span> <span class=\"toctext\">([\s\S]*?)<\/span/; var mokuji5 = response.match(Regexp)[1]; array.push(mokuji5);//配列に追加 Logger.log(array); }
長くなってしまいましたが、うまくいっています!
1ページから複数の値を取得
今回は、1ページから複数の値をWebスクレイピングしたいと思います。
はてなブログのトップページには、複数の記事が並んでいます。そこで、複数あるブログ名を取得したいと思います。
htmlソースを覗く
chromeの場合、右クリックでページのソースを表示することができます。
htmlソースの中身をみると、はてなブログは、
<div class="serviceTop-blog-title">
のタグの後に記事のタイトルが来ていることが分かります。
ブラウザで検索をかけると30個存在するようです。
これをキーにしてスクラッチします。
function myFunction() { //urlを指定 var url = 'https://hatenablog.com/'; //htmlソースを取得 var response = UrlFetchApp.fetch(url).getContentText(); //取得するタブを指定 var titleRegexp = /<div class=\"serviceTop-entry-title\">([\s\S]*?)<\/a/gm; //配列で複数のブログタイトルを取得 var title = response.match(titleRegexp); //不要な部分を整形 for(var i=0; i < title.length; i++){ //切り取る位置を指定 var from = title[i].lastIndexOf('>'); var to = title[i].lastIndexOf('<'); //対象部分を取得 title[i] = title[i].substr(from +1,to -from -1); } Logger.log(title); }
30個あるタイトルが配列で取得できています!
1ページから1つの値を取得
GASは簡単にWebスクレイピングが実現できます。
今回ははてなブログのトップページからタイトルをスクレイピングします。
function myFunction() { //urlを指定 var url = 'https://hatenablog.com/'; //htmlソースを取得 var response = UrlFetchApp.fetch(url).getContentText(); //正規表現でtitleタグを指定 var myRegexp = /<title>([\s\S]*?)<\/title>/; //タイトルを取得 var title = response.match(myRegexp)[1]; Logger.log(title); }
ログを見てみるとページタイトルが取得できています。簡単ですね!