前提・実現したいこと
https://park.ajinomoto.co.jp/recipe/
上記のページでレシピをスクレイピングしているのですが、今後その情報を利用してレシピ検索サイトを作成する予定です。
現在のスクレイピングでは
「料理区分で探す」より「主菜」「副菜」…とリンクを取得
リンク先で商品情報を取得しています。
情報の構成として
商品1 レシピ名 URL カテゴリー(主菜・副菜など)
商品2 レシピ名 URL カテゴリー(主菜・副菜など)
・
・
・
としたいのですが、レシピ詳細には「主食」「副菜」の表示がないためどのように取得すればいいか分かりません。
発生している問題・エラーメッセージ
どのような配列で取得すべきか分からない
該当のソースコード
python
1from selenium import webdriver 2from selenium.webdriver.common.keys import Keys 3import chromedriver_binary 4from selenium.webdriver.common.action_chains import ActionChains 5from selenium.webdriver.chrome.options import Options 6from time import sleep 7import csv 8import datetime 9 10 11def login(): 12 # Instagramのログインページを指定 13 driver.get('https://park.ajinomoto.co.jp/recipe/') 14 sleep(1) 15 16 category = driver.find_elements_by_xpath('//*[@id="recipeIndex"]/section[2]/div/div[3]/ul/li') 17 if len(category) == 0: 18 print('拾えていない') 19 return 20 21 for cat_html in category: 22 23 cat_a = cat_html.find_element_by_xpath('a').get_attribute('href') 24 cat_text = cat_html.find_element_by_xpath('a/span[2]').text 25 26 cat_list_a.append(cat_a) 27 28 print(cat_a) 29 print(cat_text) 30 31 sleep(1) 32 33def cat_search(link, cat_id, driver): 34 driver.get(link) 35 sleep(1) 36 37 i = 1 38 item_link_list = driver.find_elements_by_xpath('//*[@id="popularityList"]/ul/li') 39 #レシピのリンクを取得 40 for item_link in item_link_list: 41 item_a = item_link.find_element_by_xpath('div[@class="texts"]/div[1]/a').get_attribute('href') 42 43 item_list_a.append(item_a) 44 i = i + 1 45 46 if i > 6: 47 break 48 49 50 51if __name__ == '__main__': 52 # Macの方用のChrome Driverのパスの設定 53 driver = webdriver.Chrome() 54 sleep(1) 55 56 cat_id = 1 57 58 cat_list_a = [] #カテゴリーのリンク先 59 item_list_a = [] # レシピのリンク先 60 61 # ログイン 62 login() 63 64 #カテゴリーリンクに飛ぶ 65 for link in cat_list_a: 66 cat_search(link, cat_id, driver) 67 68 cat_id =+ 1 69 70 print(item_list_a) 71 driver.close() 72
試したこと
上記コードで作成された配列は下記です。
['https://park.ajinomoto.co.jp/recipe/card/705346/', 'https://park.ajinomoto.co.jp/recipe/card/703695/', 'https://park.ajinomoto.co.jp/recipe/card/706981/', 'https://park.ajinomoto.co.jp/recipe/card/701721/', 'https://park.ajinomoto.co.jp/recipe/card/800912/', 'https://park.ajinomoto.co.jp/recipe/card/704642/', 'https://park.ajinomoto.co.jp/recipe/card/800270/', 'https://park.ajinomoto.co.jp/recipe/card/800397/', 'https://park.ajinomoto.co.jp/recipe/card/800722/', 'https://park.ajinomoto.co.jp/recipe/card/703164/', 'https://park.ajinomoto.co.jp/recipe/card/708378/', 'https://park.ajinomoto.co.jp/recipe/card/800317/', 'https://park.ajinomoto.co.jp/recipe/card/704422/', 'https://park.ajinomoto.co.jp/recipe/card/708304/', 'https://park.ajinomoto.co.jp/recipe/card/704411/', 'https://park.ajinomoto.co.jp/recipe/card/801305/', 'https://park.ajinomoto.co.jp/recipe/card/703024/', 'https://park.ajinomoto.co.jp/recipe/card/706043/', 'https://park.ajinomoto.co.jp/recipe/card/701794/', 'https://park.ajinomoto.co.jp/recipe/card/706796/', 'https://park.ajinomoto.co.jp/recipe/card/705649/', 'https://park.ajinomoto.co.jp/recipe/card/705648/', 'https://park.ajinomoto.co.jp/recipe/card/702899/', 'https://park.ajinomoto.co.jp/recipe/card/702395/', 'https://park.ajinomoto.co.jp/recipe/card/706119/', 'https://park.ajinomoto.co.jp/recipe/card/703009/', 'https://park.ajinomoto.co.jp/recipe/card/706589/', 'https://park.ajinomoto.co.jp/recipe/card/710244/', 'https://park.ajinomoto.co.jp/recipe/card/706107/', 'https://park.ajinomoto.co.jp/recipe/card/706116/']
現状は各カテゴリー(主菜・副菜など)では6個ずつ取得していますが、本番では全てを保存する予定ですので6個ずつで区切ることはできません
補足情報(FW/ツールのバージョンなど)
mac
python 3.8.8
selenium
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。