質問するログイン新規登録
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

453閲覧

gasでスクレイピングをしたが、実行時間が6分以上でうまく実行できない

sawakuun

総合スコア42

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/09/14 03:27

0

1

前提

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk-sora--ypi

2022/09/14 06:35

対象サイトのURLがわからないので、こちらでは試せませんが、 cheeriogsを試してはいかがでしょうか。 https://github.com/tani/cheeriogs もしかすると別のライブラリを使うことで速度を改善できるかもしれません
guest

回答1

0

自己解決

スクレイピング先のURLが存在しないまたは、ページごとに記述方式が違うためにエラーが起きていたようです。

投稿2022/10/13 02:18

sawakuun

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問