【おしらせ】当サイトのURLは https://blog.mito.me/ から https://moreslow.jp/ に変更になりました。

大量の画像URLリストからMacで一括ダウンロードする

訳あって、画像のURLリストから大量の画像ファイルをMacで一括ダウンロードする必要があったので、どうやったかのメモ。

以前も同じような作業が必要になり、この時は「URL collector」というダウンローダーを使用しました。

ところが今回、百万件以上という莫大なファイルがあることから、このURL collectorにURLリストをペーストするだけで、一晩経っても終わらない。終わらないのか止まっているのかも分からない状態。

リストを十万程度に分割してようやくペーストしても、スタートして数時間すると謎のエラーで停止してしまう。

そして何をやるにも、一つ一つの操作がもっさりしすぎて使い物にならない。

GUIの限界を感じます。

ということでターミナルを使って一括ダウンロードしてみます。



「訳あって」と書きましたが、今回ダウンロードしたいのは、具体的にはYahoo!ショッピングの商品画像です。

モール系にありがちな不満点ですが、登録した画像を一括でダウンロードする機能が用意されていないのです。楽天ももちろんそうです。他モールに簡単に移転させないためかと思われますが、非常に不便です。

文句を言っても用意されていないものは仕方ないので、他の方法でやるしかありません。

まずは商品データからExcel等で商品画像の一覧を抜き出します。

こういうやつ。

「shopID_00000-xxxx」

全商品の画像リストを作成したら、ターミナルでダウンロードするためのコマンド「curl -O」と「画像のフルパス」をExcelなどで先頭に付加しましょう。

curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-xxxx

Yahoo!ショッピングの商品画像URLに拡張子はありません。

商品数分列挙されたリストをテキストファイルとして保存します。

適当な作業フォルダを任意の場所に作成してください。

テキストファイルの拡張子を .sh に変更、シェルスクリプトとして作業フォルダ内に保存します。

ターミナルを開きます。(アプリケーション/ユーティリティ/ターミナル.app)

カレントディレクトリを作業フォルダに移動します。

cd 作業フォルダ↵

シェルスクリプトを実行します。

sh 作成したスクリプト.sh↵

作業フォルダ内に画像がどんどんダウンロードされていきます。
画像ファイル名はパス名そのままなので拡張子が付きません。必要な場合は別途付加してやる必要があります。

より高速に終わらせるために

例えば、Yahoo!ショッピングの画像であれば、一商品につき複数画像がある場合、

shopID_00000-xxxx (第一画像)
shopID_00000-xxxx_1 (第二画像)
shopID_00000-xxxx_2 (第三画像)

のようになっているはずです。

画像ごとにシェルスクリプトを分け(第一画像だけをリストにしたもの、第二画像だけをリストにしたもの)、ターミナルウィンドウを複数開いてスクリプトを並行に実行すれば早く終わらせることが出来ます。

第一画像だけダウンロードするスクリプト(例img0.sh)
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-aaaa↵
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-bbbb↵
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-cccc↵

第二画像だけダウンロードするスクリプト(例img1.sh)
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-aaaa_1↵
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-bbbb_1↵
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-cccc_1↵

第三画像だけダウンロードするスクリプト(例img2.sh)
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-aaaa_2↵
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-bbbb_2↵
curl -O https://item-shopping.c.yimg.jp/i/n/shopID_00000-cccc_2↵



注意しなければならないこと

画像はありません画像

Yahoo!ショッピングでは画像のない商品の画像URLを指定すると、「画像はありません」というgif画像が表示されます。
シェルスクリプトを実行すると、これがそのまま画像ファイルとしてダウンロードされてしまいますので、別途除去する必要があります。

タイムアウト

回線状況など、何らかの理由であるはずの画像がダウンロードされない場合もあります。しばらくダウンロードを試み続けますが、それでもダウンロード出来ない場合は次に進んでしまいます。
リトライ回数やタイムアウトまでの時間は設定ファイルに従うようですが、詳しくはわからないので調べてみてください。
私はデフォルトのまま実行しましたが、たまにダウンロードに数秒かかる画像がありましたが、タイムアウトになった画像はほぼなかったと思います。数が膨大なので全ては確認できていません。

スポンサーリンク

フォローする