import requests from bs4 import BeautifulSoup import csv from tqdm import tqdm # Базовый URL для страниц палитр base_url = "https://www.color-hex.com/color-palettes/?page=" # Количество страниц, которые нужно парсить total_pages = 1780 output_file = "color_palettes.csv" with open(output_file, mode='w', newline='', encoding='utf-8') as file: writer = csv.writer(file) # Заголовки CSV headers = ['Palette Category', 'Palette Name'] + [f"Color {i + 1}" for i in range(448)] writer.writerow(headers) for page in tqdm(range(1, total_pages + 1), desc="Parsing pages", unit="page"): # Формируем URL для текущей страницы url = f"{base_url}{page}" response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') # Ищем все контейнеры палитр palettes = soup.find_all('div', class_='palettecontainerlist') # Проходим по каждой палитре и собираем информацию for palette in palettes: # Ищем ссылку с названием палитры (тег ) title_tag = palette.find('a') palette_name = title_tag['title'] if title_tag else 'No title' palette_category = "Default Category" # Ищем все div с цветами внутри палитры color_divs = palette.find_all('div', class_='palettecolordiv') color_codes = [] # Извлекаем цвета из атрибута style for div in color_divs: style = div['style'] # Ищем hex-код цвета в стиле color_code = style.split('background-color:')[1].replace(';', '').strip() color_codes.append(color_code) # Заполняем недостающие ячейки пустыми значениями, если цветов меньше 448 while len(color_codes) < 448: color_codes.append('') writer.writerow([palette_category, palette_name] + color_codes) else: print(f"Ошибка при запросе страницы {page}: {response.status_code}") print(f"Парсинг завершён. Данные записаны в файл {output_file}")