傘はあまり差したくない人

思ったことを書きたいだけの場所

GASでHTML要素をタグとクラス名で取得するコード

外出自粛で必要最低限外に出ず、仕事も休んだり働いたりなのでツールつくりがはかどります。

GASでHTML要素を取得するやつ書きました。

 

GASでHTML要素を取得するには、

 

var response = UrlFetchApp.fetch(URL);
var html = response.getContentText(文字コード);

 

で行って、こっからさらにタグ名で要素取得していくのがよいんだけど。

複雑なWebページだとタグ名だけで取られましても!クラス名も指定したいんですけれども!となります。

 

なので以下のようなメソッドを書いてみました。

 

// タグ名で要素のテキストを取得
function getContentOfTagName(html, tagName, className) {
  
  var i = 0;
  var j = 0;
  var startOfTag;
  var endOfTag;
  var results = [ ];
  var startTagName
  
  // タグに指定のクラス名がある場合
  if(className != ''){
    startTagName = tagName + ' ' +className;
  }else{
    startTagName = tagName;
  }
  
  while(html.indexOf('<' + startTagName,j)!=-1){
    
    // 開始タグの"<"の開始位置を取得
    j = html.indexOf('<' + startTagName,j);
    
    // 開始タグの">"位置 + 1を文字列の始めにする
    startOfStr = html.indexOf('>',j)+1;
    
    //終了タグ位置を文字列の終わりにする
    endOfStr = html.indexOf('</' + tagName + '>',j);
    
    //タグの間の文字列を配列に追加
    results[i] = html.substring(startOfStr, endOfStr);
    
    j = endOfStr + 1;
    i++;
  }
  
  return results;
}

 

タグとクラス名を指定すると書きましたが、正確には違います。

 

下記のようなタグの間をとりたい場合。

 

<p class="test">~~~~</p>

 

メソッドの第二引数に"p"、第三引数に"class="test""を渡します。

 

<p id="test" class="test">~~~~<p>

 

であれば、"p"と"id="test""を渡します。

タグ内の属性があれば、タグ名以降をこぴってそれを引数に渡す感じです。途中まででもいいです、別に。

"p"と”class="tes"とかでもいいです。雑です。

 

ちなみにタグ名だけで取得したい場合は第三引数に空文字("")を指定してください。

 

うごきゃあいいんだ、うごきゃあ、の精神です。