You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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}")