pythonでのスクレイピングによる画像収集方法
前回Kerasを用いた画像識別を行いました。
elsammit-beginnerblg.hatenablog.com
こちらのブログの中では、画像の収集方法については触れませんでした。
今回は自分が用いた画像収集方法である、スクレイピングについてまとめたいと思います!!
スクレイピングはpythonを用います。
![]() | Pythonスクレイピングの基本と実践 データサイエンティストのためのWebデータ収集術 impress top gearシリーズ 新品価格 |

■スクレイピングとは?
スクレイピングとは、
データを収集した上で加工しやすくすること
です。
似た言葉にクローリングがありますが、
クローリングとは、インターネット上に存在するWebサイト間を行き来し、それらの情報を収集することです。
よく知られた例として、検索エンジンがサイトをインデックスする際にも、クローリングが行われています。
スクレイピングは注意して行わなければなりません。
スクレイピングを行うと、下記に抵触する可能性があります。
著作権法(昭和45年5月6日)と業務妨害罪(刑法第二編第三十五章「信用及び業務に対する罪」(第233条 - 第234条 - 第234条の2))
ただデータをそのまま公開したりせず、自分なりの加工・表現を加えたり、
相手サイトに大幅な負荷をかけない
などの注意が必要になります!!
■スクレイピング前準備
pythonでスクレイピングを行う上でBeautifulSoupを利用します。
BeautifulSoupはこちらでダウンロード・インストールすることができます。
pip install beautifulsoup4
■スクレイピング実行
今回はいらすとや上で画像取集のためのスクレイピングになります。
全体ソースコードはこちらになります。
import time import re import requests from pathlib import Path from bs4 import BeautifulSoup OutPutFolder = Path('test') OutPutFolder.mkdir(exist_ok=True) url = 'スクレイピング対象のURL' LinkList = [] html = requests.get(url).text soup = BeautifulSoup(html,'lxml') List = soup.select('div.boxmeta.clearfix > h2 > a') for a in List: print(a) link_url = a.attrs['href'] LinkList.append(link_url) time.sleep(1.0) for page_url in LinkList: page_html = requests.get(page_url).text page_soup = BeautifulSoup(page_html, "lxml") img_list = page_soup.select('div.entry > div > a > img') for img in img_list: img_url = (img.attrs['src']) filename = re.search(".*\/(.*png|.*jpg)$",img_url) save_path = OutPutFolder.joinpath(filename.group(1)) time.sleep(1.0) try: image = requests.get(img_url) open(save_path, 'wb').write(image.content) print(save_path) time.sleep(1.0) except ValueError: print("ValueError!")
まず、
OutPutFolder = Path('test') OutPutFolder.mkdir(exist_ok=True)
により、ダウンロード先のフォルダが存在しない場合に新規に作成します。
次にこちらにより、url上のhtml形式の文字列を収集いたします。
そして、その中で特定のタグ収集を行います。
今回は、
div.boxmeta.clearfix > h2 > a
になります。
html = requests.get(url).text soup = BeautifulSoup(html,'lxml') List = soup.select('div.boxmeta.clearfix > h2 > a')
こちらのタグですが、ホームページ上で右クリック⇒検証を押下すればhtmlが表示されるので、
こちらから必要なタグやstyleを選択すればOKです。
そしてそして!!
for a in List: print(a) link_url = a.attrs['href'] LinkList.append(link_url) time.sleep(1.0)
こちらでリンク先URLの一覧を取得します。
※リンクから収集するのでなければ、こちらの処理は不要になります。
最後に、リンク先ホームページ上から、
imgタグを収集し、画像をダウンロードしていきます。
for page_url in LinkList: page_html = requests.get(page_url).text page_soup = BeautifulSoup(page_html, "lxml") img_list = page_soup.select('div.entry > div > a > img') for img in img_list: img_url = (img.attrs['src']) filename = re.search(".*\/(.*png|.*jpg)$",img_url) save_path = OutPutFolder.joinpath(filename.group(1)) time.sleep(1.0) try: image = requests.get(img_url) open(save_path, 'wb').write(image.content) print(save_path) time.sleep(1.0) except ValueError: print("ValueError!")
以上です!!