画像スクレイピング

引き続き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()】を用いてファイル名を生成しています.