From ed344b201da047e711f4f2b39214aad43a0a4eea Mon Sep 17 00:00:00 2001 From: IsmailovRovshan Date: Sun, 1 Dec 2024 21:46:36 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=D1=8B=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20"?= =?UTF-8?q?=D1=81=D0=BB=D0=B5=D0=B4=D1=83=D1=8E=D1=89=D0=B0=D1=8F=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scraping/scrapingMain.py | 94 ++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 43 deletions(-) diff --git a/scraping/scrapingMain.py b/scraping/scrapingMain.py index a6547b0..c4eae8d 100644 --- a/scraping/scrapingMain.py +++ b/scraping/scrapingMain.py @@ -5,55 +5,63 @@ from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager -# Инициализация драйвера -driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) +def init_driver(): + options = webdriver.ChromeOptions() + options.add_argument("--start-maximized") + return webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) -# URL страницы каталога ноутбуков -url = 'https://www.citilink.ru/catalog/noutbuki/?ref=mainpage' - -# Переход на страницу -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') - - # Список для сохранения всех характеристик ноутбуков +def scrape_all_pages(base_url, max_pages=5): + driver = init_driver() all_laptops_specs = [] - # Цикл по каждому блоку ноутбука - for laptop in laptop_blocks: - specs = {} + try: + driver.get(base_url) + current_page = 1 - # Получение всех характеристик ноутбука - spec_items = laptop.find_elements(By.CSS_SELECTOR, 'li.app-catalog-12y5psc.e4qu3682') + while current_page <= max_pages: + # Ожидание загрузки товаров + WebDriverWait(driver, 15).until( + EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.app-catalog-1o4umte.ec53oil0')) + ) - # Поиск и сохранение целевых характеристик - for item in spec_items: - label_elem = item.find_element(By.CSS_SELECTOR, 'span') - label = label_elem.text.strip() - value = item.text.replace(label, '').strip() + # Скрапинг товаров + laptop_blocks = driver.find_elements(By.CSS_SELECTOR, 'div.app-catalog-1o4umte.ec53oil0') + for laptop in laptop_blocks: + specs = {} + 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: - specs[label] = value + # Переход на следующую страницу + try: + 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 - # Добавляем характеристики ноутбука в общий список - if specs: - all_laptops_specs.append(specs) + finally: + driver.quit() - # Вывод информации обо всех ноутбуках - for i, specs in enumerate(all_laptops_specs, 1): + return all_laptops_specs + +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}') - -finally: - # Закрытие драйвера - driver.quit()