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

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

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

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

Google Apps Script

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

Q&A

解決済

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

yupon
yupon

総合スコア12

スクレイピング

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

Google Apps Script

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

1回答

0グッド

0クリップ

11161閲覧

投稿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}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

はい!まさにそうです。

回答1

1

ベストアンサー

取得した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👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

yupon

2019/10/07 14:39

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

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

Google Apps Script

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