ここ最近、Pythonを使ってスクレイピングをする方法を試しています。
今度は、スクレイピングによってテキストではなく画像を取得してみました。
結果、自分の記事にある複数の画像をまとめてダウンロードできたので、方法を紹介します。
使用した環境 - Mac OS Tahoe 26.1 - Python 3.14.2
1. BeautifulSoupを使ってみる
今回の目的である画像取得方法を調べたところ、そもそもHTMLのparseをするには、これまで使っていたseleniumやwebdriverを使うより、BeautifulSoupというモジュールを使う方が簡単そうとわかりました。
BeautifulSoupの公式ドキュメントではこのように定義されています。HTMLまたはXMLからデータを抽出できるPythonのライブラリです。
Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers hours or days of work.
2019年の記事ですが、こちらの解説がわかりやすかったです。 qiita.com
色々な記事を読んでみると、指定したhtmlページの内容全体を取得するには、下記の数行で済むことがわかりました。
import requests from bs4 import BeautifulSoup import urllib.request url = 'https://www.crossroad-tech.com/entry/babylonjs-editor-postprocess' res = requests.get(url) soup = BeautifulSoup(res.text,'html.parser')
このsoupという変数にhtmlの内容が一通り入っているので、あとはそこからimgとか要素を指定して抽出していくという流れです。直感的でわかりやすいと思いました。
2. 書いたコードの全体
作ったコードはこちらです。
soup変数にhtml全体を格納した後、find_allを使うことで"img"という属性を丸ごと取得できます。
そこからgetを使って"src"という属性を取得し、"img_urls"という配列にURLを格納します。
img_tags = soup.find_all("img") img_urls = [] for img_tag in img_tags: url = img_tag.get("src") if url != None: img_urls.append(url)
こちらを参考にさせていただきました。
今回、記事の中に貼り付けた画像は"https://cdn-ak.f.st-hatena.com/images/fotolife/T/Takyu/20251221/20251221073656.jpg"のような形式です。
あとは"Takyu"以降の文字列だけ抽出してダウンロードした時のファイル名にする処理を作りました。
この辺りが大変参考になりました。 note.nkmk.me
ダウンロードする方法は、こちらの記事がわかりやすかったです。
3. 動作確認結果
このようになりました。
Babylon.js EditorでPost Processを調整して、きれいな風景をつくってみる - CrossRoad
4. おわりに
今対対象としたブログ記事では、記事以外の画像 (ブログアイコンや、最近読まれている記事のサムネイルアイコン)はURL記述が異なっています。そのため今回は取得されていませんが、URLの形式を理解して対応すれば取得可能です。
ひとまず画像まで取得できたので、後は応用すれば色々な形でWeb記事が取得できそうです。こういう取得結果を使うとデータ分析などにも応用できそうなので、どこか機会があれば分析方法も調べてみたいと思います。

