概要
Python3で対象のWebページ内に埋めこまれているimgタグのsrcをクロールしてローカルマシンにダウンロードするツールを作ってみた
背景
とある作業にて、対象のWebページ内で表示されている画像をまとめてダウンロードする必要があったが、全てを右クリック→保存の作業をやるにはアホらしかった(画像数が100を超えていた)為、Python3でCLIから一括ダウンロードするスクリプトを作ってみた
実装
完成系
ソース
解説
- BeautifulSoup自体は以前触ったことあったので調べながらで5分ほどで動くものが完成
- 細かいパターンはテストや動作確認していないので正常系以外(src属性のしていが特殊な場合etc...)では動かないかも?
- 処理の内容としては以下
- 対象URLのHTML要素を取得
- HTMLの中からセレクター指定で対象の要素配列を取得
- 2の要素をループ処理
- 対象のsrc属性が絶対パスならそのまま対象リストに追加し、相対パスなら絶対パスに整形の上対象リストに追加
- 対象リストをループ処理
- 指定のフォルダにダウンロード
今後
- 少し手を加えれば画像以外(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