Google App ScriptのライブラリParserを使って、スクレイピングをしようとしています。
スクレイピングするところまで行ったのですが、
画像の後ろにクエリが付いているため、クエリの前(?)までの情報を取ってきたいです。
Web
1 2<ul class="entries"> 3 <li class="sample"> 4 <div class="title"><img src="../images/img001.jpg?9189221e94524452b" alt="test"></div> 5 </li> 6 <li class="sample"> 7 <div class="title"><img src="../images/img002.jpg?9189221e94524452b" alt="test"></div> 8 </li> 9 <li class="sample"> 10 <div class="title"><img src="../images/img003.jpg?9189221e94524452b" alt="test"></div> 11 </li> 12</ul> 13:
GAS
1function myFunction() { 2 // アクティブなシートを取得する 3 var sheet = SpreadsheetApp.getActiveSheet(); 4 var lastRow = sheet.getLastRow(); 5 6 // スクレイピング 7 var html = UrlFetchApp.fetch('サイト名').getContentText(); 8 var parser = Parser.data(html); 9 var str = Parser.data(html).from('<div class="sample">').to('</div>').iterate(); 10 11 // Logger.log(str); 12 13 // スプレッドシートに出力する 14 for (var i=2; i<=lastRow; i++) { 15 if(!sheet.getRange(i,6).getValue()) { 16 sheet.getRange(i,6).setValue(fetchData(str[i-2], 'images/', '?')); 17 } 18 } 19} 20 21// スクレイピングしたデータから、必要なデータを取り出す 22function fetchData(str, pre, suf) { 23 var reg = new RegExp(pre + '.*?' + suf); 24 var data = str.match(reg)[0] 25 .replace(pre, '') 26 .replace(suf, ''); 27 return data; 28} 29
?をクオーテーションで囲っているので、大丈夫かと思いましたが、これだとエラーになってしまいます。
おそらくですが、?を文字列として正しく認識させるために前後に記号などを追加する必要があることまではわかるのですが
どの記号なのかまとまっているサイトが見つからなかったため、質問させていただきました。
どなたか教えていただいてもよろしいでしょうか。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。