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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

14094閲覧

GASでWebサイトの画像を取得したい

yupon

総合スコア12

スクレイピング

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

Google Apps Script

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

0グッド

0クリップ

投稿2019/09/12 09:00

編集2019/09/13 02:04

GASでWebサイトの画像を取得し、ドライブのフォルダに保存したい。

スプレッドシートのA1列にURLを入れています。
https://pelulu.jp/collection/73351

発生している問題・エラーメッセージ

GoogleドキュメントでWebサイトの内容が取得されている。
ドキュメント上に画像も表示はされているが、jpg、pngなど、画像だけを取得したい。
数多くのサイトを日々名前をつけて保存が大変なので、画像だけをフォルダに入れたいです。

なぜこうなってしまうのか解決できません。
有識者の方、ご教示いただきたくお願いいたします。

該当のソースコード

GAS

1 2//A列に入力された画像URLの画像をダウンロード 3function downloadImages() { 4 5 // 今開いているシートの取得 6 var sheet = SpreadsheetApp.getActiveSheet(); 7 8 // A列にURL 9 range = sheet.getRange("A1:A"); 10 11 // 画像URLが入力されている最後の行数を取得 12 var row = sheet.getLastRow(); 13 for (i = 0; i < row; i++) { 14 15 // シートから1行ずつ画像URLを取得 16 var url = range.getCell(1,1).getValue(); 17 18 // 画像データ取得 19 var response = UrlFetchApp.fetch(url); 20 var image = response.getBlob(); 21 var dir = DriveApp.getFolderById("1cjBEoQRMzuCdyKcODIU794o3pyh9DcWn"); 22 dir.createFile(image); 23 24 // 画像フォルダ 25 var folders = DriveApp.getFoldersByName("画像フォルダ"); 26 while(folders.hasNext()) { 27 var folder = folders.next(); 28 if(folder.getName() == "画像フォルダ"){ 29 break; 30 } 31 } 32 33 34 } 35}

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

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

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

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

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

papinianus

2019/09/12 09:04

再現性があるリンクを最低一つは提示してくれないと、html指定したらサイト全部になるよね、としか言えないので。
yupon

2019/09/13 01:58

失礼いたしました。 例えば以下のサイトのjpg画像を名前を付けて保存ではなく、自動で取得したいです。 https://pelulu.jp/collection/73351
papinianus

2019/09/18 09:07

この中から画像を拾ってきて保存したいってことですか?
yupon

2019/09/18 11:28

はい!まさにそうです。
guest

回答1

0

ベストアンサー

取得したURLからimgタグを正規表現で取得する事で実現が可能です。
例としてあげていただきましたURLですと以下のように取得が可能です。

javascript

1var url = "https://pelulu.jp/collection/73351/"; 2var response = UrlFetchApp.fetch(url); 3var html = response.getContentText('UTF-8'); 4 5// 取得したHTMLからimgタグのsrc属性を取得する 6var r = /<img.*?src=\"(.*?)\".*?>/g; 7var a = []; 8while ((m = r.exec(html)) != null) { 9 var image_url = m[1]; 10 if (image_url.slice(0,4) === "http") { 11 // http以外が含まれている場合に除外 12 var res = UrlFetchApp.fetch(image_url); 13 var image = res.getBlob(); 14 // 取得したimageを保存する 15 } 16}

※質問としては画像取得のため、画像保存の部分は確認しておりません。
※特にファイルの中身は見ていませんので、正しく取得できないようしたら正規表現を修正、取得後にifで弾くなどの対応をお願いいたします。

投稿2019/09/26 06:01

yamap55

総合スコア1376

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

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

yupon

2019/10/07 14:39

誠にありがとうございます! 取得ができました。 そしてとても勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問