質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

1回答

794閲覧

Google apps scriptでスクレイピングをして、取得したデータをまとめてスプレッドシートに書き込みたい

sen1821

総合スコア4

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

1クリップ

投稿2019/09/01 12:31

前提・実現したいこと

外部サイトのお知らせをGASでスクレイピングして、シートにまとめたいと考えてます。
外部サイトのお知らせのタイトルを引っ張ることはなんとかできましたが、データをシートに書き込む際、ログで出力しているものすべてが書き込めず、一番上部のデータした書き込めません。

ログで出力しているデータすべてを書き込むにはどうすればいいのかご教示いただけますと助かります。

該当のソースコード

Google

1function scraping() { 2 var mySs=SpreadsheetApp.getActiveSpreadsheet(); 3 var mySheet=SpreadsheetApp.getActiveSheet(); 4 5 const URL = 'https://rmt.club/system_notices/info/1'; 6 var key = 'ak-0pt2p-0vjk0-74rm3-a1tmt-ef953'; 7 8 var option = 9 {url:URL, 10 renderType:"HTML", 11 outputAsJson:true}; 12 var payload = JSON.stringify(option); 13 payload = encodeURIComponent(payload); 14 var url = "https://phantomjscloud.com/api/browser/v2/"+ key +"/?request=" + payload; 15 var response = UrlFetchApp.fetch(url); 16 17 var json = JSON.parse(response.getContentText()); 18 var source = json["content"]["data"]; 19 20 var myRegexp = /<h3>([\s\S]*?)</h3>/g; 21 var information = source.match(myRegexp); 22 Logger.log(information) 23 mySheet.getRange(1,1).setValue(information); 24 25 }

試したこと

for構文なのかなと思いましたが、いまいちどのように入れればいいのかがわかりませんでした。。

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

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

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

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

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

guest

回答1

0

表示されているスクリプトではmatchで取得した値は1次元配列です。これを例えばスプレッドシートのA列に入れる場合、次のような修正はいかがでしょうか。

From

javascript

1var information = source.match(myRegexp); 2Logger.log(information) 3mySheet.getRange(1,1).setValue(information);

To

javascript

1var information = source.match(myRegexp).map(function(e) {return [e]}); 2mySheet.getRange(1, 1, information.length, 1).setValues(information);
  • setValuesをfor loop内で使用すると動作が遅くなりますので、2次元配列としてスプレッドシートへ入れるための値を作成した後にsetValuesを使用します。

参考

投稿2019/09/01 22:55

kisojin

総合スコア899

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問