Добавил переходы через кнопку "следующая страница"

This commit is contained in:
IsmailovRovshan 2024-12-01 21:46:36 +04:00
parent c3c6a8588e
commit ed344b201d

View File

@ -5,55 +5,63 @@ from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.chrome import ChromeDriverManager
# Инициализация драйвера def init_driver():
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
return webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
# URL страницы каталога ноутбуков def scrape_all_pages(base_url, max_pages=5):
url = 'https://www.citilink.ru/catalog/noutbuki/?ref=mainpage' driver = init_driver()
# Переход на страницу
driver.get(url)
# Определение характеристик для поиска
target_specs = ["Экран", "Процессор", "Графический процессор", "Оперативная память", "Диск", "Операционная система"]
try:
# Ожидание загрузки блоков с ноутбуками
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.app-catalog-1o4umte.ec53oil0'))
)
# Поиск блоков с ноутбуками
laptop_blocks = driver.find_elements(By.CSS_SELECTOR, 'div.app-catalog-1o4umte.ec53oil0')
# Список для сохранения всех характеристик ноутбуков
all_laptops_specs = [] all_laptops_specs = []
# Цикл по каждому блоку ноутбука try:
for laptop in laptop_blocks: driver.get(base_url)
specs = {} current_page = 1
# Получение всех характеристик ноутбука while current_page <= max_pages:
spec_items = laptop.find_elements(By.CSS_SELECTOR, 'li.app-catalog-12y5psc.e4qu3682') # Ожидание загрузки товаров
WebDriverWait(driver, 15).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.app-catalog-1o4umte.ec53oil0'))
)
# Поиск и сохранение целевых характеристик # Скрапинг товаров
for item in spec_items: laptop_blocks = driver.find_elements(By.CSS_SELECTOR, 'div.app-catalog-1o4umte.ec53oil0')
label_elem = item.find_element(By.CSS_SELECTOR, 'span') for laptop in laptop_blocks:
label = label_elem.text.strip() specs = {}
value = item.text.replace(label, '').strip() spec_items = laptop.find_elements(By.CSS_SELECTOR, 'li.app-catalog-12y5psc.e4qu3682')
for item in spec_items:
try:
label_elem = item.find_element(By.CSS_SELECTOR, 'span')
label = label_elem.text.strip()
value = item.text.replace(label, '').strip()
specs[label] = value
except Exception as e:
print(f"Ошибка в характеристике: {e}")
if specs:
all_laptops_specs.append(specs)
# Сохраняем только целевые характеристики # Переход на следующую страницу
if label in target_specs: try:
specs[label] = value next_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH,
'//*[@id="__next"]/div/main/section/div[2]/div/div/section/div[2]/div[3]/div/div[2]/div[3]/a/div'))
)
# Прокрутка к кнопке
driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'});", next_button)
next_button.click()
WebDriverWait(driver, 10).until(EC.staleness_of(laptop_blocks[0]))
current_page += 1 # Переход на следующую страницу
except Exception as e:
print("Кнопка 'Следующая' не найдена или конец каталога:", e)
break
# Добавляем характеристики ноутбука в общий список finally:
if specs: driver.quit()
all_laptops_specs.append(specs)
# Вывод информации обо всех ноутбуках return all_laptops_specs
for i, specs in enumerate(all_laptops_specs, 1):
if __name__ == "__main__":
url = 'https://www.citilink.ru/catalog/noutbuki/?ref=mainpage'
laptops = scrape_all_pages(url, max_pages=5) # Установите количество страниц
for i, specs in enumerate(laptops, 1):
print(f'Ноутбук {i}: {specs}') print(f'Ноутбук {i}: {specs}')
finally:
# Закрытие драйвера
driver.quit()