今回、作成するプログラムはPythonによるWebスクレイピング〜画像丸ごと編〜です。
下記に特定の画像情報がわかるURLから取得する方法をリンクとして貼っておきます。
上記のものはかなり局所的なプログラムですが、今回のプログラムは特定のURL内の画像を丸ごと収集するよう作成しています。
より、使いやすいプログラムでかつ大量のデータを瞬時に取得できることを目的として記述しました。
参考にするもよし、コピってすぐに利用するのもよしです。お役に立てれれば幸いです。
プログラムの流れについて
今回、作成したプログラムの各処理の流れを記載します。
■ 各処理の流れ
1. 各モジュールをインポート
2. 解析したURLとリスト用変数を準備
3. BeautifulSoupにてURLを解析
4. for文にてfind_all()メソッドで取得したデータをリスト用変数に格納
5. リスト用変数からimgフォルダへ格納
各処理の説明
各処理の説明の前に、必要なモジュールをインストールしておきましょう。
今回利用するものは、requests, BeautifulSoup, lxmlです。
pip install xxxxでインストールしちゃってください。
import requests # urlを読み込むためrequestsをインポート from bs4 import BeautifulSoup # htmlを読み込むためBeautifulSoupをインポート
ここでは、利用するモジュールをインポートします。
URL = 'https://su-gi-rx.com' # URL入力 images = [] # 画像リストの配列
ここでは、任意のURLを入力してください。(例として私のブログサイトを記載しています。)
次に、画像データを格納するためのリスト用変数を準備しておきます。
soup = BeautifulSoup(requests.get(URL).content,'lxml') # bsでURL内を解析
次に、読み込んだ特定のURLをBeautifulSoupにてlxmlパースし、soup変数に格納します。
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変数内のデータからfind_all()メソッドを利用して、imgタグを取り出し、link変数に格納します。
ifでは、link変数内のjpgデータとpngデータにあるsrcタグを取得し、リスト用変数imagesに格納します。
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文にてリスト用変数内の画像データを読み込むために、一度変数targetに格納し、requests.get()メソッドにて画像データを読み込み、変数reに格納します。注意ですが、あらかじめローカルフォルダであるimgフォルダは作成しておく必要がありますので、準備しておいてください。
そして、変数reに格納した画像データをimgフォルダ内に格納します。このとき、パス名を取得するため、保存名が長くなるのが億劫なので、パス名の一番最後(画像名に当たる部分)を保存名にするためsplit()メソッドで処理を入れています。
write()メソッドにて格納する画像データを書き込むわけですが、変数reに.contentを使用しないとデフォルトで拡張子が.txtになってしまうため、避けるために.contentを利用します。
最後に、print(“ok”)などでプログラムが終わった確認を付け加えてあげるのも個人的にはいいかもです。
★ scraping-img-1.py
# scraping-img-1.py import requests # urlを読み込むためrequestsをインポート from bs4 import BeautifulSoup # htmlを読み込むためBeautifulSoupをインポート URL = 'https://su-gi-rx.com' # URL入力 images = [] # 画像リストの配列 soup = BeautifulSoup(requests.get(URL).content,'lxml') # bsでURL内を解析 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 target in images: # imagesからtargetに入れる re = requests.get(target) with open('img/' + target.split('/')[-1], 'wb') as f: # imgフォルダに格納 f.write(re.content) # .contentにて画像データとして書き込む print("ok") # 確認
処理結果
また、今後もプログラミングに取り組み続けていく中で、実務に利用できる学びを身につけていかなければなりません。
実務に活かす際に学習として利用していたPython本が以下のものになります。
・PythonによるWebスクレイピング(オライリー出版)
・増補改訂Pythonによるスクレイピング&機械学習 開発テクニック(クジラ飛行机)
・Pythonクローリング&スクレイピング – データ収集・解析のための実践開発ガイド
プログラミング学習で作りたいものがない場合
独学・未経験から始める人も少なくないので、プログラミング学習の継続や学習を続けたスキルアップにはそれなりのハードルが設けられています。
また、プログラミング学習においても、学習者によってはすでに学習対象とするプログラミング言語や狙っている分野が存在するかもしれません。
そのため、費用を抑えて効率的にピンポイント学習で取り組みたいと考える人も少なくありません。
また、プログラミング学習において目的を持って取り組むことは大切ですが、『何を作ればいいかわからない。。』といったスタートの切り方で悩む人もいると思います。
そういったプログラミング学習の指標となる取り組み方について詳細に記載したまとめ記事がありますので、そちらも参照して頂けると幸いです。