ハテブカスタム

はてなブログ初心者によるブログ初心者のためのブログ

Python入門①Webスクレイピング!ネットの画像を一括ダウンロード

\この記事をシェア!/

Python入門 Webスクレイピング ネット画像 一括ダウンロード

Pythonプログラム入門の1回目です。
Webスクレイピングにより、指定したURLから画像ファイルのみを抽出して自分のパソコンにダウンロードします。

Webスクレイピングって??

scrape = 削り取るという意味ですが、、わたしはRubyプログラムをスクールで学んでいたとき、メンターの方から初めて聞いた言葉でした。

そのときは、スクールの課題でアプリをつくってたとき、URLからそのページのタイトルなどを取得できないものか?と相談した際に、スクレイピングというものがあるよと、教わりました。

Webスクレイピングとは、外部サーバへアクセスし、そのコンテンツから欲しい情報を引き出すプログラムのことです。
まさにわたしがやりたかったことだったので、それから しばらくWebスクレイピングにのめりこみました。
スクレイピングはハマリます!おもしろいですよ。

必要なプログラムをインストールする

Pythonのインストール

まずはPythonをインストールしましょう。
こちらの公式サイトから、Pythonインストーラーをダウンロードできます。とくに理由がなければ最新版をおすすめします。
Download Python | Python.org
ご自身の環境(Windows 64ビットと32ビット、Mac OS)によってインストールの手順が変わります。下記の記事がとてもわかりやすく解説されておりましたので、よろしければご参考ください。
【最新】はじめてPythonをインストールするための手順についてOS別(Windows10, Mac)で解説

pipのインストール

Pythonには「モジュール」という便利なライブラリがあります。
Pythonに標準で付属している「組み込みモジュール」もあれば、あらたにインストールして利用できるものもあります。

モジュールもPythonのプログラムです。モジュールを利用することで、さまざまな機能が使えるようになります。

外部からモジュールをインストールするには、「pip」と呼ばれるプログラムを使います。そのため、まずpipプログラムをインストールしておく必要があります。
pipプログラムが外部ライブラリを管理するための機能となります。

Windows - コマンドプロンプトで実行(エンターキー)

> python -m pip install -U pip
Mac - ターミナルで実行
> python3 -m pip install -U pip
    python XXXX…の「python」は、Pythonプログラムの実行コードです。Pythonをインストールしたことで、利用できるようになっています。

モジュール(ライブラリ)のインストール

pipプログラムのインストールが完了しましたら、引き続きコマンドプロンプトMacだとターミナル)からモジュール「requests」と「bs4」をインストールしてください。

    Pythonは、プログラムの内容によって、必要なモジュールをインストールして使います。
    今回のプログラムでは、「requests」「bs4」の2つを追加します。
pipコマンドで「requests」「bs4」をインストール
> pip install requests
> pip install beautifulsoup4

プログラムの流れ

それでは、コードを見ていきましょう。

1.モジュールのインポート

import requests   # urlを読み込むのに必要
from bs4 import BeautifulSoup   # htmlを読み込むのに必要

import os

上記がプログラムの冒頭です。importの命令文で、今回利用するモジュールを呼び出しています。
「# urlを読み込む…」などの部分はコメントです。Pythonプログラム内では「#」を文頭につけることで、コメントアウトされます。

  • requests - URLを読み込む。
  • BeautifulSoup - URLを指定して取得した、サイトページのHTMLを解析する。
  • os - プログラムファイルがある場所に、画像を保存するフォルダを作成する。

※「os」は、標準ライブラリ(組み込みモジュール)として組み込まれています。

2. ページURLとリストimagesを定義する

try:
    os.mkdir("img")   # プログラムファイルのある場所にフォルダ「img」を作成
except:
    pass   # すでに「img」フォルダがある場合、作成をスキップ

URL = "任意のアドレス"   # URL入力
images = []   # 画像リストの配列

ダウンロードした画像を保存するため、フォルダ名imgPythonプログラムの実行ファイルのある場所に作成します。

try:~except:」というのは例外処理の構文で、try:以下の処理を実行したときにエラーとなる場合、プログラムをストップせずexcept:以下の処理に移行して実行するものです。
except:以下に「pass」句を使用しているため、エラーが発生しても何も処理を行いません。
この場合、「os.mkdir("img")」でimgフォルダの作成を実行したとき、imgフォルダがすでにあるとエラーが発生しますが、try:~except:構文のおかげでプログラムが停止することなく、そのまま処理が継続されます。

そして画像をダウンロードするページのURLと、リストであるimagesを変数として定義します。

3. モジュールbs4により、HTMLを解析する

soup = BeautifulSoup(requests.get(URL).content,'lxml')   # bsでURL内を解析

「requests」で取得したHTML情報を「BeautifulSoup」で解析し、解析したデータを変数soupに格納します。

4. 画像ファイル .jpgと .pngを取得する

for link in soup.find_all("img"):   # imgタグを取得しlinkに格納
    if link.get("src").endswith(".jpg"):   # imgタグ内の.jpgであるsrcタグを取得
        images.append(link.get("src"))   # imagesリストに格納
    elif link.get("src").endswith(".png"):   # imgタグ内の.pngであるsrcタグを取得
    	images.append(link.get("src"))   # imagesリストに格納

for文を利用し、変数soup内にあるデータから .jpgファイルと .pngファイルを抽出し、リストimagesに格納します。

5. imgフォルダ作成と画像ファイルの保存

for target in images:   # imagesからtargetに入れる
    re = requests.get(target)
    with open('img/' + target.split('/')[-1], 'wb') as f:   # imgフォルダに格納
        f.write(re.content)   # .contentにて画像データとして書き込む

for文を利用し、リストimages内に格納している画像データを、with open関数を利用して1ファイルごとに保存していきます。

コード全体

コードの全体です。


プログラムの実行

上のソースコードを、メモ帳などのテキストエディタに貼り付け、「XXXXXX.py」とPythonプログラムファイルの拡張子「.py」をつけて適当なフォルダに保存してください。ファイル名は、任意のものでかまいません。

ファイルを保存したらコマンドプロンプトMacだとターミナル)を起動し、保存したフォルダの場所に移動してから以下を実行してください。

> python ファイル名.py

コマンドプロンプトだとイマイチ使いづらい、というかたは、Pythonをインストールした際に一緒にインストールされている「IDLE」というプログラムファイルから実行する方法がありますので、そちらを起動してください。

python idle

起動したらメニューにある[File > Open] からさきほど保存したpythonのファイルを開きます。

python idle

つづいてメニューの[Run > Run Module] もしくはファンクションキーの「F5」を押すと、プログラムが実行されます。

実行結果

画像を一括ダウンロードするページのURLに、姉妹ブログ「ながカフェ」のアドレスを指定して実行した結果です。
NAGA CAFE

URLを入力する場所は、コードの

URL = "任意のアドレス"   # URL入力

の"任意のアドレス"の部分です。ながカフェの場合

URL = "https://naga-cafe.blogspot.com"   # URL入力

となります。

【画像ダウンロード結果

無事、画像ファイルを取得できました!

今回はここで終了です。ここまでご覧いただき、ありがとうございました。
おつかれさまでした。


参考図書


よろしければ、下記の投稿もごらんください↓
rubirubi.hateblo.jp