LoginSignup
6
8

More than 5 years have passed since last update.

Python3で対象のWebページの画像ファイルを一括ダウンロードするスクリプトをサクっと作ってみた

Last updated at Posted at 2018-08-29

概要

Python3で対象のWebページ内に埋めこまれているimgタグのsrcをクロールしてローカルマシンにダウンロードするツールを作ってみた

背景

とある作業にて、対象のWebページ内で表示されている画像をまとめてダウンロードする必要があったが、全てを右クリック→保存の作業をやるにはアホらしかった(画像数が100を超えていた)為、Python3でCLIから一括ダウンロードするスクリプトを作ってみた

実装

完成系

web-static-downloader.mov.gif

ソース

Github

解説

  • BeautifulSoup自体は以前触ったことあったので調べながらで5分ほどで動くものが完成
  • 細かいパターンはテストや動作確認していないので正常系以外(src属性のしていが特殊な場合etc...)では動かないかも?
  • 処理の内容としては以下
  1. 対象URLのHTML要素を取得
  2. HTMLの中からセレクター指定で対象の要素配列を取得
  3. 2の要素をループ処理
    1. 対象のsrc属性が絶対パスならそのまま対象リストに追加し、相対パスなら絶対パスに整形の上対象リストに追加
  4. 対象リストをループ処理
    1. 指定のフォルダにダウンロード

今後

  • 少し手を加えれば画像以外(JavaScriptやCSSファイル)もまとめて落とせるように出来そうなので気が向いたらやってみたい
  • セレニウム的な感じで画面をまたいだ一括ダウンロードも出来るようにしたい

20180914追加

スクレイピング対策を入れているサイトの場合、ヘッダー情報をしっかり指定しないとスクレイピング時に403などで弾かれる可能性があったので、任意のヘッダーを指定出来るようにしました。

+ #Custom Header
+ HEADERS = {
+     "Cache-Control": "no-cache",
+     "Connection": "keep-alive",
+     "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
+ }
...
- response = urllib.request.urlopen(target).read()
+ request = urllib.request.Request(target,None,HEADERS)
+ response = urllib.request.urlopen(request).read()

※詳しいソース差分はコチラ

終わりに

皆様どうぞお好きに改造してみてくださいw

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8