【Python】ウェブページ上に表示されている画像を一括ダウンロード

前回はPythonを使ってウェブページ上のテキスト情報を取得するスクレイピングを行いました。

今回はこれを少し応用してウェブページ上に表示されている画像を一括でダウンロードしてしまいます。

前回と同様に『シゴトがはかどる Python自動処理の教科書』を参考にしています。といっても画像をダウンロードする箇所ぐらいで、あとは前回のスクレイピングの応用で済みました。

スポンサーリンク

プログラムの内容

404 NOT FOUND | iEhohs.com
情シスの覚え書きブログです。

こちらがサンプルデータです。

山科の歴史散歩

そして対象となるページがこちらです(サンプルのページは誤って削除して作り直した経緯があり、スクショと実際の画面が違うことがあります)

このように各史跡の案内ページの一覧があり、それぞれサムネイル画像表示されています。これらの画像をダウンロードしていきます。

<div class="entry-content">
	<div class="shiseki-card">
	    <div class="shiseki-thumbnail">
		    <a href="https://yamashina.iehohs.com/shiseki/bishamon/"><img width="640" height="424" src="https://yamashina.iehohs.com/wp-content/uploads/bishamon-640x424.jpg" class="attachment-medium size-medium wp-post-image" alt="毘沙門堂" loading="lazy" srcset="https://yamashina.iehohs.com/wp-content/uploads/bishamon-640x424.jpg 640w, https://yamashina.iehohs.com/wp-content/uploads/bishamon-1280x848.jpg 1280w, https://yamashina.iehohs.com/wp-content/uploads/bishamon-768x509.jpg 768w, https://yamashina.iehohs.com/wp-content/uploads/bishamon-1536x1018.jpg 1536w, https://yamashina.iehohs.com/wp-content/uploads/bishamon.jpg 1920w" sizes="(max-width: 640px) 100vw, 640px" /></a>
	    </div>
	    <div class="shiseki-name">
		    <h3><a href="https://yamashina.iehohs.com/shiseki/bishamon/" title="毘沙門堂">毘沙門堂</a></h3>
	    </div>
	    <div class="shiseki-address">
            京都市山科区安朱稲荷山町18
        </div>
        <div class="shiseki-station">
            最寄駅:山科駅
        </div>
    </div>

HTMLの一部抜粋です。この一覧は.entry-contentというdivで囲まれており、画像はその中の.shiseki-thumbnailというdivに囲まれています。

プログラムを実行すると同じディレクトリにimageというフォルダを作成し、その中に画像データをかダウンロードしていきます。

この時のファイル名は画像URLのディレクトリ部分を取り除いたものになります。

こんな感じです(サムネイルに横幅640pxって大きすぎな気が)

プログラミング

モジュールの準備

前回と同様にモジュールの準備が必要です。PowerShellで下記のコマンドを入力します。

既にインストールしていたら飛ばしてOKです。

# Requestsのインストール
pip install -U requests==2.24.0
# Beautiful Soup4のインストール
pip install -U beautifulsoup4==4.9.1
# HTML5対応のパーサーのインストール
pip install heml5lib

Python

import requests, os, time
from bs4 import BeautifulSoup
# 対象ページのURL
target_url = 'https://ymsn.iehohs.net/shiseki/'
# 画像ファイルのアップロード先URL
uploads_url = 'https://ymsn.iehohs.net/wp/wp-content/uploads/'
html = requests.get(target_url).text
soup = BeautifulSoup(html, 'html5lib')
div = soup.select('.entry-content')[0]
# サムネイル画像のクラス属性
thm_list = div.select('.shiseki-thumbnail')
# 保存先のフォルダを指定
save_dir = './image'
if not os.path.exists(save_dir):
    os.mkdir(save_dir)
# 各サムネイル画像を走査
for thm in thm_list:
    url = thm.find('img').get('src')
    res = requests.get(url)
    # フォルダに保存
    file_name = url.replace(uploads_url, '')
    save_file = save_dir + '/' + file_name
    with open(save_file, 'wb') as fp:
        fp.write(res.content)
    print("save:", save_file)
    time.sleep(1,

コメント

タイトルとURLをコピーしました