引き続きPythonでスクレイピングをしています.
今回は画像のスクレイピング,ということでキッコーマンのレシピの画像をスクレイピングしていきます.
スクレイピングしたサイトはキッコーマンです.
以下,書いたコードです.
from bs4 import BeautifulSoup
import requests
import os
import uuid
url = requests.get('https://www.kikkoman.co.jp/homecook/theme/popular/')
soup = BeautifulSoup(url.content.decode("utf-8", "ignore"), 'html.parser')
wrap = soup.find('div', class_='cmn-recipe-card-wrap')
title = wrap.find_all('div', class_="cmn-recipe-card__title")
title_list = [x.get_text() for x in title]
print(title_list)
imgs = soup.find_all('img',class_='cmn-recipe-card__image__inner')
if not os.path.exists('img-kiko'):
os.makedirs('img-kiko')
for img in imgs:
print(img['src'])
req_img = requests.get(img['src'])
with open(str('img-kiko/')+str(uuid.uuid4()), 'wb') as file:
file.write(req_img.content)
解説
このコード全体としてはキッコーマンのレシピのページからレシピ情報をスクレイピングしています.このとき,レシピのタイトルとサムネイル画像をスクレイピングしています.
divタグのうち,【cmn-recipe-card-wrap】というクラスがレシピカード全体を包んでいる要素です.
そしてその要素のうち,【cmn-recipe-card__title】というクラス名のついたタグを取得し,タイトルとして収納します.
サムネイル画像については【cmn-recipe-card__image__inner】を指定して画像を習得しています.
if not os.path.exists('img-kiko'):
os.makedirs('img-kiko')
このコードでは画像を収納するフォルダを作成しています.
for img in imgs:
print(img['src'])
req_img = requests.get(img['src'])
with open(str('img-kiko/')+str(uuid.uuid4()), 'wb') as file:
file.write(req_img.content)
for以下のこの部分で画像を取得しています.また,この際【uuid.uuid4()】を用いてファイル名を生成しています.