前提
gasでスクレイピングをしているのだが、実行時間が6分以上かかってしまい最後まで処理が実行されない。
実現したいこと
コードを整理し実行時間を短くするor処理を分ける
発生している問題・エラーメッセージ
実行時間が6分以上のため実行できませんでした。
該当のソースコード
JavaScript
1topics = Parser.data(rightBlock).from('class="title clrFix">').to('span class="status icoSts02">').iterate(); 2
上記の.iterate();の部分で実行に時間がかかっています。
試したこと
.iterate();をbuildに変更した際は、一つの取得したい情報を取得できました。
補足情報(FW/ツールのバージョンなど)
gas. parser 8
以下全体コード
JavaScript
1function getDocompany() { 2 let response = UrlFetchApp.fetch("https://・・・・l"); 3 let text = response.getContentText("utf-8"); 4 //console.log(text); 5 6 let rightBlock = Parser.data(text).from('class="mainRight"').to('</section>').build(); 7 //console.log(rightBlock); 8 9 10 let companyList= new Array(); 11 12 13 topics = Parser.data(rightBlock).from('class="title clrFix">').to('span class="status icoSts02">').iterate(); 14 console.log(topics); 15 16 for(news of topics){ 17 18 //インデックス番号 19 let companyNumber = topics.indexOf(news) + 1; 20//console.log(companyNumber); 21 //URLの取得 22 let dodaUrlArray = news.match(/href="https:.*?"/g); 23 for(dodaCompany of dodaUrlArray){ 24 let id = "jd/-fm__jobdetail/-mpsc_sid__10/-tp__1/" 25 dodaCompanUrl = dodaCompany.split('href="')[1].slice( 0, -4 ) + id ; 26 27 //console.log(dodaCompanUrl); 28 } 29 30 //会社名の取得 31 let companyArray = news.match(/width688">.*?</g); 32 for(company of companyArray){ 33 companyTitle = company.split('">')[1].slice( 0, -1 ) ; 34 //console.log(companyTitle); 35 36 } 37 // インデックス番号、URL、会社名 38 let newsInfo = [companyNumber,dodaCompanUrl,companyTitle]; 39 40 //リストに格納 41 companyList.push(newsInfo); 42 } 43 44 var ss = SpreadsheetApp.openById("・・・"); 45 var sheet = ss.getSheetByName("・・・・"); // シート名で指定 46 var lastRow = sheet.getLastRow(); 47 48 var date = new Date(); 49 date = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd'); 50 51 // リストの配列数分スプレッドシートに追加 52 for(var i=0; i < companyList.length; i++){ 53 sheet.getRange(lastRow+1+i,1).setValue(date); 54 sheet.getRange(lastRow+1+i,2).setValue(companyList[i][0]); 55 sheet.getRange(lastRow+1+i,3).setValue(companyList[i][1]); 56 sheet.getRange(lastRow+1+i,4).setValue(companyList[i][2]); 57 } 58 59}

回答1件
あなたの回答
tips
プレビュー