Я пытаюсь автоматизировать процесс, позволяющий посетить веб-сайт и получить информацию о продуктах из топа. 100 товаров на этой странице и поместите их в файл Excel.
Пояснение кода:
У меня есть класс Webscraper, внутри которого я вызываю две функции. Сначала я вызываю функцию scroll_and_click_view_more, которая просто прокручивает веб-страницу, которую я посещаю. Затем я вызываю функцию prod_vitals, которая извлекает код продукта и названия продуктов с этой веб-страницы.
Описание ошибки:
Всякий раз, когда я запускаю код ниже, до определенного максимального значения. продуктов, код зависает после точки и выдает ошибку «Индекс вне диапазона». Если я устанавливаю max_count_of_products=50, код зависает на строке. Если я устанавливаю
max_count_of_products=100, код зависает на 93. Не существует фиксированного индекса, где Я застреваю. Если я изменю значение max_count_of_products, точка, в которой код зависает, также изменится.
Ниже прилагаю скриншоты ошибки.
max_count_of_products=50

Найдите мой код ниже:
products_summary = []
max_count_of_products=100
def scroll_and_click_view_more(driver,href):
flag=False
last_height = driver.execute_script("return window.pageYOffset + window.innerHeight")
while True:
try:
driver.execute_script("window.scrollBy(0, 800);")
time.sleep(4)
new_height = driver.execute_script("return window.pageYOffset + window.innerHeight")
try:
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div.product-tile')))
except Exception as e:
if new_height == last_height and flag==False:
print("Reached the end of the page and no product tiles were found: ",href)
return "No product tiles found"
else:
last_height = new_height
continue
div_count = 0
flag=True
response = driver.page_source
soup = BeautifulSoup(response, 'html.parser')
div_elements = soup.find_all('div', class_ = 'product-tile')
div_count = len(div_elements)
if(div_count > max_count_of_products):
return(driver.page_source)
else:
driver.execute_script("window.scrollBy(0, 300);")
time.sleep(3)
new_height = driver.execute_script("return window.pageYOffset + window.innerHeight")
#print(new_height)
if new_height == last_height:
return(driver.page_source)
else:
last_height = new_height
except Exception as e:
print(e)
break
def prod_vitals(soup,title,url):
count_of_items=1
products_data = [] # Array to store all product data for our excel sheet
for div in soup.find_all('div', class_ = 'product-tile'): # Iterate over each individual product-tile div tag
if count_of_items
Подробнее здесь: https://stackoverflow.com/questions/790 ... rom-a-webs