下記の赤字の3つの画像ファイルを表示するプログラムを作ってみましょう。
ちなみに、読み込み解析するHTMLファイルは下記のように独自にサンプルとして作り、ネット上にアップロードしておきました。
皆様も独自に作って契約しているサーバーにアップしてみてください。
それでは早速、「ページ内の画像を一括ダウンロードするプログラム」を作ってみましょう。
解説
import requests | 事前にコマンドプロンプトでインストールしたインターネットにアクセス命令する外部ライブラリ「requests」、これををimport |
from bs4 import BeautifulSoup | 事前にコマンドプロンプトでインストールしたHTMLを解析する外部ライブラリ「BeautifulSoup」、これが入っているbs4というパッケージからBeautifulSoupをimport |
from pathlib import Path | フォルダを作るためにはPathを使います。標準ライブラリでpathlibというパッケージに入っているのでそこからインポートします。 |
import urllib | 相対URLを絶対URLに変換するurllibライブラリをimport |
import time | 標準ライブラリのtimeをインポートします。 |
load_url =”https://www.roadtoupload.com/学びファイル/python2年生/Python_sample3.html” | 変数load_urlに解析するWEBページアドレスを代入 |
html = requests.get(load_url) | 変数htmlにネット上のHTMLファイルを読み込む命令のrequests.get(load_url)を代入します。 |
soup = BeautifulSoup(html.content, “html.parser”) | 変数soupにBeautifulSoupを使ったHTML解析の命令を代入します。 |
out_folder = Path(“img_download”) | img_downloadという名のフォルダを指定して、それを変数out_folderに代入します。 |
out_folder.mkdir(exist_ok=True) | フォルダを作る命令をします。 |
for element in soup.find_all(“img”): | リストから1つずつ取り出すためfor文を使用し、すべてのimg要素を探しリストで返すfind_all(”img”)とします。 |
src = element.get(“src”) | 変数srcに取得したsrc属性を代入します。 |
image_url = urllib.parse.urljoin(load_url, src) | 相対URLを絶対URLに変換する命令をします。それを変数image_urlとします。 |
imgdata = requests.get(image_url) | 変数image_urlのデータを取得し、変数imgdataに代入します。 |
filename = image_url.split(“/”)[-1] | URLの一番最後のファイル名を取り出します。「-1」は後ろから1番目を指す。それを変数filenameとします。 |
out_path = out_folder.joinpath(filename) | フォルダ内のファイルにアクセスするパスを作り、それを変数out_pathに代入します。 |
with open(out_path, mode=”wb”)as f: | ファイルを開き、バイナリモードで書き込む。省略してfとする |
f.write(imgdata.content) | .contentのバイナリーデータで書き込む |
time.sleep(2) | 一回アクセスしたら2秒待つという命令をして、相手のサーバーにアクセスし過ぎて迷惑をかけないようにする。 |
実行結果
デスクトップにフォルダが作られていることが確認できます。
そしてフォルダの中を確認すると、、、
画像ファイルが3つダウンロードされていることも確認できます。
*尚、ここではバージョン「Python 3.10.1」を使用しています。
この本から引用、参考に学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが2,000円程ならコスパよく、買っておいてよかったと満足してます。