Я пытаюсь разобрать таблицу, используя селен и красивый суп, и у меня есть проблемы с поиском и привлечением значения из класса.Похоже, что каждый столбец имеет одинаковое имя класса, что делает его более сложным.Вот часть кода html, которую я пытаюсь проанализировать:
А вот как выглядит таблица:
Итак, что я до сих пор кодировал:
driver = webdriver.Chrome()
driver.get(base_url)
driver.implicitly_wait(100)
driver.find_elements_by_class_name("plp-pod__image")[0].click()
first = driver.find_elements_by_class_name("col-6 specs__cell specs__cell--label")[0].getText()
first
Итак, в основном я открываю браузер Chrom, загружаю страницу элемента, который ищу, ичем искать все классы, называемые «col-6 specs__cell specs__cell - label», и пытаться получить текст из первого появившегося.Я пытаюсь решить это для всех 5 измерений и его значений.
Когда я выполняю свой код, я получаю эту ошибку:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-27-2e124acf6be5> in <module>
3 driver.implicitly_wait(100)
4 driver.find_elements_by_class_name("plp-pod__image")[0].click()
----> 5 first = driver.find_elements_by_class_name("col-6 specs__cell specs__cell--label")[0].getText()
IndexError: list index out of range
Есть идеи, как мне разобрать эти элементы, чтобы получить все 5 измерений и их значений в панде dataframe?
Я попытался объединить оба ваших предложения следующим образом:
from selenium.common.exceptions import NoSuchElementException,
NoSuchFrameException
i = "Marshalltown PT164BR"
base_url = f"https://www.homedepot.com/s/" + i +"?NCNI-5"
driver = webdriver.Chrome()
driver.get(base_url)
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR,
".plp-pod__image"))).click()
#%%
groups = driver.find_elements_by_class_name("specs__group")
data = {}
for group in groups:
if "placeholder" not in group.get_attribute("class"):
specs = group.find_elements_by_class_name("specs__cell")
dimension = specs[0].text.strip()
value = float(specs[1].text.replace("in","").strip())
#print(dimension,":",value)
if dimension not in data:
data[dimension] = []
data[dimension].append(value)
print(data)
data_frame = pd.DataFrame(data=data)
print(data_frame)
, и я попал на веб-страницу, которую я использую в качестве теста, на элемент, который я использую в качестве теста, но это не кажетсячитать правильные классы, и это дает мне эту ошибку:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-1f3f99bc45ee> in <module>
5 specs = group.find_elements_by_class_name("specs__cell")
6 dimension = specs[0].text.strip()
----> 7 value = float(specs[1].text.replace("in","").strip())
8 #print(dimension,":",value)
9 if dimension not in data:
ValueError: could not convert string to float: