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
プログラムの流れ
それでは、コードを見ていきましょう。
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 = [] # 画像リストの配列
ダウンロードした画像を保存するため、フォルダ名imgをPythonプログラムの実行ファイルのある場所に作成します。
「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」というプログラムファイルから実行する方法がありますので、そちらを起動してください。
実行結果
画像を一括ダウンロードするページのURLに、姉妹ブログ「ながカフェ」のアドレスを指定して実行した結果です。
NAGA CAFE
URLを入力する場所は、コードの
URL = "任意のアドレス" # URL入力
の"任意のアドレス"の部分です。ながカフェの場合
URL = "https://naga-cafe.blogspot.com" # URL入力
となります。
無事、画像ファイルを取得できました!
今回はここで終了です。ここまでご覧いただき、ありがとうございました。
おつかれさまでした。
参考図書