前提
python初心者です
独学でyoutubeや書籍で学んでいるのですが行き詰ってしまいました
実現したいこと
amazonのランキング情報を商品、評価、価格を取得し一覧にしたい
発生している問題・エラーメッセージ
出力結果が1つの商品しか出てこない
該当のソースコード
python
1import requests 2from bs4 import BeautifulSoup 3url=requests.get("https://www.amazon.co.jp/gp/bestsellers/automotive/ref=zg-bs_automotive_dw_sml") 4soup = BeautifulSoup(url.text, "html.parser") 5 6amazon = soup.find(id="gridItemRoot") 7 8name = amazon.find(class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text #商品名 9rank = amazon.find(class_="a-icon-alt").text #評価 10price = amazon.find(class_="p13n-sc-price").text #価格 11box = {} 12for list_ in amazon: 13 name = amazon.find(class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text #商品名 14 rank = amazon.find(class_="a-icon-alt").text #評価 15 price = amazon.find(class_="p13n-sc-price").text #価格 16 17 box["商品名"]=name 18 box["評価"]=rank 19 box["価格"]=price 20box 21 22----------------------------出力結果------------------------------------ 23{'商品名': 'ワコーズ F-1 フューエルワン ガソリン(2サイクル・4サイクル)・ディーゼル兼用洗浄系燃料添加剤 200ml F101', 24 '評価': '5つ星のうち4.4', 25 '価格': '¥1,200'}
試したこと
amazon = soup.find(id="gridItemRoot")というコードでamazonのランキングの各商品はgridItemRootといIDに格納されているため、findで1つの商品データしか取得していないから出力結果が1つなのではないかと考え、amazon = soup.find(id="gridItemRoot")からamazon = soup.find_all(id="gridItemRoot")に変更をしたところ下記のエラーが出ます
python
1import requests 2from bs4 import BeautifulSoup 3url=requests.get("https://www.amazon.co.jp/gp/bestsellers/automotive/ref=zg-bs_automotive_dw_sml") 4soup = BeautifulSoup(url.text, "html.parser") 5 6amazon = soup.find_all(id="gridItemRoot") 7 8name = amazon.find(class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text #商品名 9rank = amazon.find(class_="a-icon-alt").text #評価 10price = amazon.find(class_="p13n-sc-price").text #価格 11box = {} 12for list_ in amazon: 13 name = amazon.find(class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text #商品名 14 rank = amazon.find(class_="a-icon-alt").text #評価 15 price = amazon.find(class_="p13n-sc-price").text #価格 16 17 box["商品名"]=name 18 box["評価"]=rank 19 box["価格"]=price 20box 21-------------出力結果----------------------- 22AttributeError: ResultSet object has no attribute 'find'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
質問
上記のコードの不備はどこでしょうか?
find_allに対してfindは使えないのでしょうか?
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー