前提・実現したいこと
python初心者です。検索エンジンやECサイトでのスクレイピングによる情報収集を試みております。
検索結果にでてきたページタイトルを広告を避けつつ取得したいため、find、find_allを複数回使用した
コードを実行しているのですが下記のにエラーが出てしまいます。
対処法や、コードの間違いなどご存じの方いらっしゃいましたら教えていただけませんでしょうか。
1つ目のfindで検索結果全体の情報を取得
直後のfind_allでリスティング広告などを除いた各検索結果を取得
最後のfind_allでページタイトルが入ったタグの情報を取得という具合となっております。
発生している問題・エラーメッセージ
AttributeError Traceback (most recent call last) <ipython-input-29-f0571655c0ec> in <module> 9 a = soup.find(class_='s-main-slot s-result-list s-search-results sg-row') 10 b = a.find_all(class_='sg-col-4-of-12 s-result-item s-asin sg-col-4-of-16 sg-col sg-col-4-of-20') ---> 11 c = b.find_all(class_='a-size-base-plus a-color-base a-text-normal') 12 c ~\Anaconda3\lib\site-packages\bs4\element.py in __getattr__(self, key) 2171 def __getattr__(self, key): 2172 """Raise a helpful exception to explain a common code fix.""" -> 2173 raise AttributeError( 2174 "ResultSet object has no attribute '%s'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?" % key 2175 ) AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
該当のソースコード
url="該当のURL" browser.get(url) browser.implicitly_wait(10) r = browser.page_source # browser.quit() soup=BeautifulSoup(r,features='lxml') r = browser.page_source soup=BeautifulSoup(r,features='lxml') a = soup.find(class_='s-main-slot s-result-list s-search-results sg-row') b = a.find_all(class_='sg-col-4-of-12 s-result-item s-asin sg-col-4-of-16 sg-col sg-col-4-of-20') c = b.find_all(class_='a-size-base-plus a-color-base a-text-normal') c
試したこと
findやfind_allのほかにselectなども用いてみましたがやはり同様のエラーが出てしまいます。
補足情報(FW/ツールのバージョンなど)
環境はこのような感じです
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
import pandas as pd
from selenium.webdriver.common.keys import Keys
import os
import glob
import chromedriver_binary
import requests
from bs4 import BeautifulSoup
また、商品タイトルが格納されているタグのclass名はどの検索結果も同じなので、一度広告以外の検索結果に絞るためにfind_allを2回使う必要がある状態です