Pythonを使ってウェブ上から画像を半自動ダウンロードする方法

Pythonを使ってウェブ上から画像を半自動ダウンロードする方法です。

2020年の9月から、ジブリのホームーページ上で原画の場面写真が一般公開されています。

https://www.ghibli.jp/works/chihiro/

1つ1つダウンロードするのも手ですが、それだとなかなか大変です。

URLのパターンがパターン化されていたので、プログラムを組みました。

Pipenvでまずは環境を作りましょう。
詳しくはこちら

Pythonのバージョン管理をPipenvにした話。Windows10ではPipenvがベストプラクティスな気がする。

実際のプログラムは以下です。

import requests
import time
import urllib.request

sleep_time_sec = 2 #スリープする秒数。

last_num_str = input("枚数を入力して下さい")
last_num = int(last_num_str)
last_num = last_num + 1
middle_url = input("作品URLを入力して下さい")

base_url = "https://www.ghibli.jp/gallery/"

num_list = list(range(1,last_num))
img_format = '.jpg'

for num in num_list:
	output = base_url + middle_url + '{0:03d}'.format(num) + img_format
	print(output)
	target = urllib.request.urlopen(output).read()
	file_name = middle_url + '{0:03d}'.format(num) + img_format
	with open(file_name, mode="wb") as f:
		f.write(target)
	time.sleep(sleep_time_sec)

 

 

https://www.ghibli.jp/works/totoro/

URLはトトロの場合

https://www.ghibli.jp/gallery/totoro001.jpg

から

https://www.ghibli.jp/gallery/totoro050.jpg

のような形で、001から050まで連番桁数で公開されているので、

「枚数」の部分では50と入力し、「作品URL」では「totoro」と入力することで、公開URLに対応しています。(枚数は公開されている画像の枚数のことです)

まぁこれでもすべての作品をダウンロードするのには1枚1枚ダウンロード画像の確認作業などを入れていくと数時間かかったんですけどね…。手動で行うと数日はかかったのではないかと思います。

何かの参考にどうぞ。


※プログラムによるデータのクローリング/スクレイピング(収集)を行う場合は、1アクセスに数秒の間隔をおき、相手のウェブサーバーに負荷をかけないようにしましょう。

※プログラムによるアクセスは個人の責任で行って下さい。
クローリング/スクレイピングは場合によっては法律に抵触する可能性があるので、robots.txtなどを確認したり、該当データのダウンロードが許可されているかを確認してから行いましょう。

参考:「スクレイピング、クローリングする時の注意点」
https://docs.pyq.jp/column/crawler.html

「クローリングとスクレイピングの違いとは?」
https://www.geekly.co.jp/column/cat-technology/1912_011/