|
|
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:
|
|
|
# Ищем ссылку с названием палитры (тег <a>)
|
|
|
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}")
|